Salut,
J'essaye de faire un "change or add" avec sed mais ça ne passe pas.
sed --in-place '/^MaxMem/ c\MaxMem = default' /tmp/test || echo "MaxMem = default" >> /tmp/test
mais si le sed ne trouve pas la ligne qui commence par MaxMem le echo n'est executé. Si il la trouve il la modifie correctement.
Ou est le problème ??
Le sed ne devrait pas retourner un code d'erreur si le search ne marche pas ?
# Par curiosité
Posté par mururoa69 . Évalué à 1.
# Dans le principe même
Posté par fcartegnie . Évalué à 4.
Qu'est ce qui te fait penser qu'un 'editeur de flux' devrait lever une erreur s'il n'y a rien à replacer dans le flux ? S'il ne trouve pas, il fait ce que tu lui as demandé et sort le texte sans remplacement.
La chose qui te manque ici, c'est une variable de stats pour le nombre de remplacements.
# hmm
Posté par gaaaaaAab . Évalué à 2.
si on en croit ton test, il semblerait que non ;-)
Sed travaille par bloc, et là, tu cherches à lui faire faire une opération sur l'intégralité du fichier. Du coup, pour que sed puisse se charger de ça, il faut le faire travailler sur l'intégralité du fichier (,$).
Ensuite, ça revient à écrire un script faisant une opération quand le fichier match, et une autre quand il ne matche pas.
exemple :
$ cat file1
pattern1 val1
pattern2 val2
$ cat file2
pattern2 val2
$ cat tst.sed
/pattern1/,$ {
s/pattern1.*/pattern1 val1bis/
b
}
/pattern1/,$! {
$ a\
pattern1 val1bis
b
}
$ sed -f ./tst.sed file1
pattern1 val1bis
pattern2 val2
$ sed -f ./tst.sed file2
pattern2 val2
pattern1 val1bis
mais bon, là, c'était juste pour faire joujou avec sed (et je dis pas que c'est la meilleure syntaxe sed pour ce truc là ...), mais je serais toi, je ferais du grep -l pour décider si tu fais du remplacement ou de l'ajout
[^] # Re: hmm
Posté par mururoa69 . Évalué à 2.
grep -q MaxMem /tmp/test && sed --in-place '/^MaxMem/ c\MaxMem = default' /tmp/test || echo 'MaxMem = default' » /tmp/test
mais c'est moins beau ;)
[^] # Re: hmm
Posté par gaaaaaAab . Évalué à 4.
ça ferait une plus jolie ligne que ta ligne actuelle, et ça serait plus lisible que mon sed :)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.