Como encontro uma palavra em um arquivo e insiro texto duas linhas abaixo?

1

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.

    
por user4901146 25.10.2016 / 17:44

4 respostas

2
$ 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
por 25.10.2016 / 18:07
1

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:

  • Se houver menos de duas linhas entre o padrão a ser pesquisado e o EOF, a última linha a partir do padrão será repetida para criar duas linhas entre

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
    
por 25.10.2016 / 17:57
0

Outro sed

sed '/cow/! b;n;n;a\yay' file.txt

Outro awk

awk '{print;this--};/cow/{this=2}! this{print "yay"}' file.txt
    
por 25.10.2016 / 18:09
0

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.

    
por 25.10.2016 / 18:20

Tags