#1 Le 12/06/2022, à 03:23
- PowaBanga
[Résolu] sed et retours à la ligne
Salut à tous,
J'ai un ficher xml (des centaines) dont j'aimerais pouvoir modifier le contenu en masse
<command>
echo patate
echo Broncoli
<\command>
Il y a du texte donc, avant et après la section. Donc je dois pouvoir changer tout le contenu de la section command par un autre,
<command>
find -name *.pkg.tar.* -exec chmod 775 {} \; ;
find -name *.pkg.tar.* -exec mv -f {} \; ;
git clean -df
<\command>
j'ai donc créé cette fonction : (comme ça je peux aussi m'en servir pour créer un nouveau xml)
theCommands()
{
echo "
find -name *.pkg.tar.* -exec chmod 775 {} \; ;
find -name *.pkg.tar.* -exec mv -f {} \; ;
git clean -df
"
}
Je souhaite donc passer ma commande dans un sed, en la modifiant au préalable avec un autre sed:
le premier
theCommands | sed ':a;N;$!ba;s/\n/\\n/g;s/\\/\\\\/g;s/\*/\\*/g;s/\./\\./g'
\\nfind -name \*\.pkg\.tar\.\* -exec chmod 775 {} \\; ;\\nfind -name \*\.pkg\.tar\.\* -exec mv -f {} \\; ;\\ngit clean -df\\n
les deux
sed -i ':a;N;$!ba;s/<command>.*<\/command>/<command>$(theCommands | sed ':a;N;$!ba;s/\n/\\n/g;s/\\/\\\\/g;s/\*/\\*/g;s/\./\\./g')</command>/g'
Mais le souci, c'est que lorsque du premier sed, il me remplace tous les retours à la ligne par '\\n' au lieu de '\n'
du coup ça peut pas marcher !
Voilà, j'en appelle encore une fois aux férus de ce forum dans l'espoir divine de trouver un peu de lumière
[edit]
ha c'est bon, j'ai trouvé, je double les slash juste après avoir remplacé mes retours à la ligne XD
theCommands | sed ':a;N;$!ba;s/\\/\\\\/g;s/\*/\\*/g;s/\./\\./g;s/\n/\\n/g'
le problème se règle donc en mettant mon remplacement de retour à la ligne à la fin
Dernière modification par PowaBanga (Le 12/06/2022, à 11:12)
Hors ligne