Le sed ne devrait pas retourner un code d'erreur si le search ne marche pas ?
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.
$ 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
# hmm
Posté par gaaaaaAab . En réponse au message code retour sed ?. É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