$ cat ip.txt
the
cow
goes
moo
$ sed '/cow/{N;N; s/$/\nyay/}' ip.txt
the
cow
goes
moo
yay
-
N;N;
obtém as próximas duas linhas -
s/$/\nyay/
adiciona outra linha
Eu tenho um arquivo no qual quero encontrar uma palavra-chave e inserir o texto 2 linhas abaixo.
Por exemplo, vamos dizer que o arquivo que eu tenho contém as seguintes palavras
the
cow
goes
moo
Eu quero encontrar a palavra "vaca" e inserir o texto "yay" no arquivo 2 linhas abaixo da palavra vaca.
the
cow
goes
moo
yay
Acredito que isso seria feito com sed
, mas não é possível fazê-lo funcionar.
Qualquer ajuda é muito apreciada.
com awk
:
awk '/cow/ {print; getline; print; getline; print; print "yay"; next}; 1'
/cow/
corresponde cow
no registro e, em seguida, {print; getline; print; getline; print; print "yay"; next}
imprime a linha, getline
obtém a próxima linha, que é impressa também, a mesma para a próxima e, em seguida, yay
é impresso e, em seguida, vai para a próxima linha ( next
)
1
(true) imprimirá o restante das linhas como ação padrão
Advertência:
Exemplo:
% cat file.txt
the
cow
goes
moo
% awk '/cow/ {print; getline; print; getline; print; print "yay"; next}; 1' file.txt
the
cow
goes
moo
yay
Outro sed
sed '/cow/! b;n;n;a\yay' file.txt
Outro awk
awk '{print;this--};/cow/{this=2}! this{print "yay"}' file.txt
com ed
ed file << EOF
/cow/+2a
yay
.
,p
q
EOF
para imprimir a saída modificada; ou
ed file << EOF
/cow/+2a
yay
.
wq
EOF
ou (como bash
one-liner)
printf '%b\n' '/cow/+2a' 'yay\n.' 'wq' | ed file
para escrever as alterações no lugar.