sed
faz retornar um status de saída:
$ echo "foo" | sed 's/xx/yy/'
foo
$ echo $?
0
$ sed 's/xx/yy/' foo.txt
sed: can't read foo.txt: No such file or directory
$ echo $?
2
Os códigos de saída do Sed são sobre se o programa foi bem-sucedido ou não, eles não têm nada a ver com os componentes internos do que o sed
está fazendo, apenas se o comando foi ou não executado.
Dito isso, o GNU sed oferece uma maneira de fazer isso:
q [exit-code]
Immediately quit the sed script without pro‐
cessing any more input, except that if auto-
print is not disabled the current pattern
space will be printed. The exit code argument
is a GNU extension.
Por exemplo, (tirado de aqui ):
$ echo "foo"|sed '/foo/ s/f/b/;q'
boo
$ echo $?
0
$ echo "trash"|sed '/foo/{s/f/b/;q}; /foo/!{q100}'
trash
$ echo $?
100
Se você quisesse relatar o fato de que qualquer qualquer substituição foi bem-sucedida em qualquer linha da entrada, você poderia sinalizar substituições bem-sucedidas no espaço de espera e verificá-la na última linha:
seq 6 | sed 's/4/four/;s/5/five/; tm;${x;/1/{x;q};x;q1};b;:m;x;s/.*/1/;x'
tm
ramifica para o rótulo m
se qualquer substituição foi bem-sucedida. Lá, colocamos 1
no espaço de espera, que procuramos na última linha.