Menu

Problème Sed [Résolu]

-
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,

Afficher la suite 

Votre réponse

1 réponse

Messages postés
36532
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
26 mai 2019
3557
0
Merci
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 ;-\

Merci pour l'éclaircissement, Tu es vraiment top zipe31!
Merci encore.
Question Supplémentaire, Serais-tu comment faire autrement sans utilisé sed?
Cordialement,
Titoulevrai
zipe31
Messages postés
36532
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
26 mai 2019
3557 -
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
Commenter la réponse de zipe31