O grep
comando fornece um status de saída:
$echo "foo.bar" | grep -o foo
foo
$echo $?
0
$echo "foo.bar" | grep -o pop
$echo $?
1
Mas preciso usar sed
e percebi que ele não tem status de saída:
$echo "foo.bar" | sed 's/bar.*$//'
foo.
$echo $?
0
$echo "foo.bar" | sed 's/pop.*$//'
foo.bar
$echo $?
0
Eu sei que devo brincar com a -q
opção, mas não consegui.
command-line
sed
Josef Klimuk
fonte
fonte
sed
certamente tem um status de saída, apenas não faz o que você precisa aqui. Se osed
comando falhar, por exemplo, se você tentar executá-lo em um arquivo ao qual não tenha acesso de gravação ou que não exista,sed
sairá com um status de saída diferente de 0. O status de saída apenas indica sesed
conseguiu fazer o que você pediu eecho "foo.bar" | sed 's/pop.*$//'
foi executado corretamente. Excluiu todas as linhas compop
. O fato de não haver essas linhas é irrelevante, o comando ainda funcionava.Respostas:
Você pode usar q n para sair com o status de saída n - mas, para tornar isso útil, você também precisará usar alguns Controle de Ramificação e Fluxo :
Provavelmente, é melhor escolher um valor para n que seja distinto de um dos valores de status de saída padrão:
Então por exemplo
enquanto que
Se você deseja omitir a impressão padrão do espaço do padrão, substitua
q
porQ
(observe queQ
é uma extensão GNU).fonte
Veja como pesquisar regex com sed e destacar correspondências ou retornar o código de saída (5) se nenhuma correspondência encontrada:
Este é input.txt:
Aqui está minha função para Imprimir tudo + Realçar correspondências + Retornar código de saída:
Quando não houver correspondência, ele retornará o código de saída (5). Você pode usá-lo com gato e cachimbo | também:
* Nenhuma combinação encontrada *
Graças a https://unix.stackexchange.com/a/405725/43233 - estou usando a opção + sed quit.
fonte