banner-message-text='This system is for the use of authorized users only.\n\nAll connections are monitored and recorded.\nAnyone using this system expressly consents to such monitoring\nand is advised that if such monitoring reveals possible\nevidence of criminal activity, system personnel may provide the\nevidence from such monitoring to law enforcement officials.\n\n!!! Disconnect IMMEDIATELY if you are not an authorized user. !!! \n\nAll requests can be sent to admin@enedwaith.org'
J’ai essayé avec sed mais sans succès.
J’ai d’abord créé une variable
message="This system is for the use of authorized users only.\n\nAll connections are monitored and recorded.\nAnyone using this system expressly consents to such monitoring\nand is advised that if such monitoring reveals possible\nevidence of criminal activity, system personnel may provide the\nevidence from such monitoring to law enforcement officials.\n\n!!! Disconnect IMMEDIATELY if you are not an authorized user. !!! \n\nAll requests can be sent to admin@enedwaith.org"
si je veux écrire directement dans un fichier, ça marche très bien avec printf.
Mais si je veux faire un remplacement je n’y arrive pas.
Il semble que sed ne soit pas le bon outil, et je ne maitrise pas awk.
Avec sed je faisais:
sed -E 's,(banner-message-text=).*,\1'"$message"',g' fichier.txt
ou
sed -E 's,(banner-message-text=).*,\1$message,g' fichier.txt
Mais systématiquement il interprète les \n dans le texte et cela conduit à un message d’erreur du type
Si tu veux que les sauts de ligne soient interprétés:
$ sed -E 's/(banner-message-text=).*$/\1message avec un \nsaut de ligne/' test.txt
[org/gnome/login-screen]
banner-message-enable=true
banner-message-text=message avec un
saut de ligne
Si tu veux qu’ils ne soient pas interprétés, tu peux échapper \n avec un autre \:
$ sed -E 's/(banner-message-text=).*$/\1message avec un \\nsaut de ligne/' test.txt
[org/gnome/login-screen]
banner-message-enable=true
banner-message-text=message avec un \nsaut de ligne
Le texte est assez long, donc j’utilise une variable à la place, et c’est apparemment là que le problème se pose.
Le soucis aussi c’est que dans la chaîne il y a des caractère ’ en début et fin de message.
De fait le sed utilise alors des " au lieu de ’ mais les saut de ligne sont interprétés.
si j’utilise les ’ pour délimiter la commande sed, alors je ne peux plus utiliser les ’ dans ma chaîne de remplacement.
Car, dans le fichier, le texte est encadré par des ’
:~# sed -E 's/(banner-message-text=).*/\1\x27'"${message}"'\x27/g' 01-banner-message
[org/gnome/login-screen]
banner-message-enable=true
banner-message-text='This system is for the use of authorized users only.\n\nAll connections are monitored and recorded.\n\nAnyone using this system expressly consents to such monitoring\nand is advised that if such monitoring reveals possible\nevidence of criminal activity, system personnel may provide the\nevidence from such monitoring to law enforcement officials.\n\n ! Disconnect IMMEDIATELY if you are not an authorized user. ! \n\nAll requests can be sent to admin@enedwaith.org'
Merci pour le coup de main.
PS: deux heures et demi de recherches pour juste une ligne de sed