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:
hello there
my dear old friend
a lot of things
we'll pass along the end
Aqui está minha função para Imprimir tudo + Realçar correspondências + Retornar código de saída:
highlight()
{
pattern=$1
shift
sed '/'"${pattern}"'/,${s//\x1b[32m&\x1b[0m/g;b};$q5' "$@"
}
$ destaque "lo \ | end" input.txt || eco -e "\ n * Nenhuma correspondência encontrada *"
hel lo lá
meus queridos fri velhos acabar
uma lo t de coisas
que vai passar uma lo ng a final
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:
$ cat input.txt | destaque "quente \ | e" || eco -e "\ n * Nenhuma correspondência encontrada *"
olá,
meu querido velho amigo,
um monte de coisas
que passaremos no final
* Nenhuma combinação encontrada *
Graças a https://unix.stackexchange.com/a/405725/43233 - estou usando a opção + sed quit.
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.