use sed para executar um script de shell se a pesquisa falhar

use sed para executar um script de shell se a pesquisa falhar

estou fazendo

sed "s/test1/replacetext" testfile.txt

Estou tentando usar /q por não conseguir encontrar 'test1' e executar um script de shell. Como eu posso fazer isso? Obrigado Nate

Responder1

Com GNU sede múltiplas linhas de entrada:

sed -n '/pattern/{h;s//replacement/;};p;${g;//!q1;}' file
  • Em linhas que contêm pattern:
    • Adicione a linha ao buffer de espera
    • Realizar substituição
  • imprimir cada linha
  • Quando a última linha ( $) for alcançada:
    • obter o buffer de espera
    • Se o espaço padrão não contiver pattern, saia com o código de saída1
  • Expressões regulares vazias //usam o último padrão regex usado

Alternativa - awk:

awk 'END{exit !repl} /pattern/{repl++; sub(/pattern/,"replacement")} 1' file
  • Se uma linha contém pattern, a variável replé incrementada e a substituição é feita
  • No final, saia com o logical notda variável (se replfor zero, saia com status 1)

Alternativa – grepa entrada de antemão, por exemplo:

if grep -q 'pattern' file; then
    # input contains pattern - do sed replacement
    sed 's/pattern/replacement/' file
else
    : input does not contain pattern - execute shell script
fi

informação relacionada