¿Cómo encuentro una palabra en un archivo e inserto texto dos líneas debajo?

¿Cómo encuentro una palabra en un archivo e inserto texto dos líneas debajo?

Tengo un archivo en el que quiero encontrar una palabra clave e ingresar texto 2 líneas hacia abajo.

Por ejemplo, digamos que el archivo que tengo contiene las siguientes palabras

the
cow
goes
moo

Quiero poder encontrar la palabra "vaca" e ingresar el texto "yay" en el archivo 2 líneas debajo de la palabra vaca.

the
cow
goes
moo
yay

Creo que esto ya se habría hecho, sedpero no puedo hacerlo funcionar.

Cualquier ayuda es muy apreciada.

Respuesta1

$ cat ip.txt 
the
cow
goes
moo

$ sed '/cow/{N;N; s/$/\nyay/}' ip.txt 
the
cow
goes
moo
yay
  • N;N;obtener las siguientes dos líneas
  • s/$/\nyay/agregar otra linea

Respuesta2

Con awk:

awk '/cow/ {print; getline; print; getline; print; print "yay"; next}; 1'
  • /cow/coincide cowen el registro, y luego {print; getline; print; getline; print; print "yay"; next}imprime la línea, getlinenos da la siguiente línea, que también se imprime, lo mismo para la siguiente, y luego yayse imprime, luego pasa a la siguiente línea ( next)

  • 1(verdadero) imprimirá el resto de las líneas como acción predeterminada

Advertencia:

  • Si hay menos de dos líneas entre el patrón a buscar y EOF, entonces la última línea a partir del patrón se repetirá para formar dos líneas entre ellas.

Ejemplo:

% 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

Respuesta3

Otrosed

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

Otroawk

awk '{print;this--};/cow/{this=2}! this{print "yay"}' file.txt

Respuesta4

Coned

ed file << EOF
/cow/+2a
yay
.
,p
q
EOF

imprimir la salida modificada; o

ed file << EOF
/cow/+2a
yay
.
wq
EOF

o (como una bashsola línea)

printf '%b\n' '/cow/+2a' 'yay\n.' 'wq' | ed file

para escribir los cambios en su lugar.

información relacionada