![¿Cómo encuentro una palabra en un archivo e inserto texto dos líneas debajo?](https://rvso.com/image/97225/%C2%BFC%C3%B3mo%20encuentro%20una%20palabra%20en%20un%20archivo%20e%20inserto%20texto%20dos%20l%C3%ADneas%20debajo%3F.png)
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, sed
pero 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íneass/$/\nyay/
agregar otra linea
Respuesta2
Con awk
:
awk '/cow/ {print; getline; print; getline; print; print "yay"; next}; 1'
/cow/
coincidecow
en el registro, y luego{print; getline; print; getline; print; print "yay"; next}
imprime la línea,getline
nos da la siguiente línea, que también se imprime, lo mismo para la siguiente, y luegoyay
se 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 bash
sola línea)
printf '%b\n' '/cow/+2a' 'yay\n.' 'wq' | ed file
para escribir los cambios en su lugar.