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 sed
e 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ávelrepl
é incrementada e a substituição é feita - No final, saia com o
logical not
da variável (serepl
for zero, saia com status1
)
Alternativa – grep
a 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