Problème Sed

Résolu/Fermé
titoulevrai - Modifié le 22 août 2018 à 09:10
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 22 août 2018 à 11:16
Bonjour,
J'ai un problème avec une commande sed, je vous explique.
J'ai un script qui doit rajouter dans un autre fichier de script un debug en fin de ligne.
Ma commande sed du scrip donne a peut près ça
sed "/^#\|^$/! s/^[^#]*/& \&\& echo \"\ cette commande : OK\" >> result.txt \|\| echo \" Commande Not OK\" >> errors.txt /" FichierIn.txt >>fichierOut.sh


Dans mon FichierIn.txt il y a plusieurs commandes dont un autre sed et des echo ou awk par exemple.
Voici un exemple de FichierIn:
sed -i '/^test/ s/^/#/' /var/tmp/test


Et voici ce que j'obtient avec mon sed:
sed -i '/^test/ s/^/ && echo "cette commande : OK" >> result.txt || echo "Commande NOT OK" >> errors.txt #/' /var/tmp/test


et pourtant voici ce que je voudrais obtenir:
sed -i '/^test/ s/^/#/' /var/tmp/test && echo "cette commande : OK" >> result.txt || echo "Commande NOT OK" >> errors.txt

J'ai le même problème pour des commande awk.
Merci d'avance.
Cordialement,

1 réponse

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
22 août 2018 à 10:17
Salut,

C'est normal. Ta commande prend en compte le fait qu'il puisse exister des lignes de commentaires (symbolisées par un croisillon (#)), mais ne font pas la différence avec la commande de substitution (
s/^/#/
) qui contient elle aussi un croisillon ;-\

Malheureusement la commande "sed", même si elle peut gérer des conditions, n'est peut être pas à même de gérer des conditions trop complexes, comme c'est le cas ici ;-\

0
Merci pour l'éclaircissement, Tu es vraiment top zipe31!
Merci encore.
0
Question Supplémentaire, Serais-tu comment faire autrement sans utilisé sed?
Cordialement,
Titoulevrai
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 419
22 août 2018 à 11:16
En fait on peut le faire avec "sed". Par contre, tu risques d'être confronté à d'autres problèmes auxquels tu n'as pas pensé, comme ce fût le cas sur ce fil ;-\

Là je passe par un fichier (script.sed) qui contient les commandes à fournir à "sed". Je fais ça pour une question de lisibilité.

Le fichier à modifier :
$ cat fich 
sed -i '/^test/ s/^/#/' /var/tmp/test

#blabla

blablabla # commentaire


Le fichier contenant les commandes pour "sed" :
$ cat script.sed 
/^#\|^$/! {
\%/#/%{
s/$/ \&\& echo \"\ cette commande : OK\" >> result.txt \|\| echo \" Commande Not OK\" >> errors.txt /
b
}
s/^[^#]*/& \&\& echo \"\ cette commande : OK\" >> result.txt \|\| echo \" Commande Not OK\" >> errors.txt /
}


Le résultat :
$ sed -f script.sed fich 
sed -i '/^test/ s/^/#/' /var/tmp/test && echo " cette commande : OK" >> result.txt || echo " Commande Not OK" >> errors.txt

#blabla

blablabla && echo " cette commande : OK" >> result.txt || echo " Commande Not OK" >> errors.txt # commentaire
0