![Como encontro uma palavra em um arquivo e insiro texto duas linhas abaixo dela?](https://rvso.com/image/97225/Como%20encontro%20uma%20palavra%20em%20um%20arquivo%20e%20insiro%20texto%20duas%20linhas%20abaixo%20dela%3F.png)
Eu tenho um arquivo no qual desejo encontrar uma palavra-chave e inserir o texto 2 linhas abaixo.
Por exemplo, digamos que o arquivo que possuo contém as seguintes palavras
the
cow
goes
moo
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, sed
mas não consigo fazê-lo funcionar.
Qualquer ajuda é muito apreciada.
Responder1
$ cat ip.txt
the
cow
goes
moo
$ sed '/cow/{N;N; s/$/\nyay/}' ip.txt
the
cow
goes
moo
yay
N;N;
obter as próximas duas linhass/$/\nyay/
adicione outra linha
Responder2
Com awk
:
awk '/cow/ {print; getline; print; getline; print; print "yay"; next}; 1'
/cow/
correspondecow
no registro, e depois{print; getline; print; getline; print; print "yay"; next}
imprime a linha,getline
nos dá a próxima linha, que é impressa também, o mesmo para a próxima, e depoisyay
é impressa, depois vai para a próxima linha (next
)1
(true) imprimirá o restante das linhas como ação padrão
Embargo:
- Se houver menos de duas linhas entre o padrão a ser pesquisado e o EOF, então a última linha começando no padrão será repetida para formar duas linhas entre eles.
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
Responder3
Outrosed
sed '/cow/! b;n;n;a\yay' file.txt
Outroestranho
awk '{print;this--};/cow/{this=2}! this{print "yay"}' file.txt
Responder4
Comed
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
uma linha)
printf '%b\n' '/cow/+2a' 'yay\n.' 'wq' | ed file
para escrever as mudanças no lugar.