Sous Linux (BusyBox, QNAP-NAS), je souhaite ajouter un chemin supplémentaire à mon fichier .bashrc
via un script utilisant sed. La partie correspondante du fichier se présente comme suit:Insérer (ou ajouter) une ligne se terminant par une barre oblique inverse () en utilisant sed
[...]
export PATH=\
/bin:\
/sbin:\
/usr/bin:\
/usr/sbin:\
/usr/local/bin
[...]
La ligne supplémentaire doit être inséré (à la position 4 dans le fichier d'origine) est /opt/bin:/opt/sbin:\
. Pour obtenir ce fait mon sed one-liner ressemble à ceci:
sed '4i/opt/bin:/opt/sbin:\\' .bashrc > .bashrc.tmp
, échappant correctement à la barre oblique inverse. D'une certaine manière sed convertit le reste \'
dans une nouvelle ligne de manger la barre oblique inverse, entraînant:
[...]
export PATH=\
/opt/bin:/opt/sbin:
/bin:\
[...]
Ajout d'un troisième backslash me donne la barre oblique inverse, mais ajoute encore le saut de ligne, donc
sed '4i/opt/bin:/opt/sbin:\\\' .bashrc > .bashrc.tmp
résultats dans
export PATH=\
/opt/bin:/opt/sbin:\
/bin:\
Si j'ajoute un espace supplémentaire dans ma commande sed
sed '4i/opt/bin:/opt/sbin:\\ ' .bashrc > .bashrc.tmp
Tout va bien, mais j'obtiens aussi de l'espace en fin de ligne.
export PATH=\
/opt/bin:/opt/sbin:\ # extra space here
/bin:\
Qu'est-ce que le truc pour est maintenant une seconde commande sed supprimant les espaces de fin
#!/bin/sh
sed -e '4i/opt/bin:/opt/sbin:\\ ' .bashrc > .bashrc.tmp
sed -e 's/[ \t]*$//' .bashrc.tmp > .bashrc.tmp2 # change \t to real tab
Mais je me demande pourquoi sed transforme \'
en une nouvelle ligne, et comment résoudre le travail ci-dessus un simple doublure? Comment puis-je insérer (ou ajouter) une ligne avec une barre oblique inverse à l'aide de sed? Merci d'avance.
Fonctionne comme le charme, merci. – skipperTux
christoph, vous pouvez accepter la réponse en cliquant sur le "tick". –