Problème Sed
Résolu
titoulevrai
-
zipe31 Messages postés 34620 Date d'inscription Statut Contributeur Dernière intervention -
zipe31 Messages postés 34620 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
Et voici ce que j'obtient avec mon sed:
et pourtant voici ce que je voudrais obtenir:
J'ai le même problème pour des commande awk.
Merci d'avance.
Cordialement,
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
-
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 ;-\
-
-
-
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
-