Usando el comando sed cambia una cadena en una línea determinada con una cadena determinada

Usando el comando sed cambia una cadena en una línea determinada con una cadena determinada

Necesito usar sed para cambiar una cadena en un archivo solo en la cuarta línea si contiene una cadena llamada "prueba"

Básicamente, lo que tengo ahora es:

sed '/test/ s/abc/zz/g' sample

Básicamente, esto revisará las líneas y verá si tiene prueba y luego cambiará abc a zz si está en esa línea.

Pero como lo hago solo para la 4ta linea.

Lo intenté

 sed '/test/ 4s/abc/zz/g' sample

Agregando el 4 delante de la s, pero no funciona.

Respuesta1

De una sola mano:

sed -e '4 {
  /test/s/abc/zz/g
}' <file

Respuesta2

No estoy seguro, pero ¿funcionaría algo como esto?

awk 'NR==4 {print $0}' filename.txt | grep 'test' | sed 's/abc/xyz/g'

Respuesta3

de otra manera:

primero busque la línea con esa cadena "prueba":

LINE=$(grep archivo "prueba" -n | awk '{print $1}' | cut -d ':' -f1 | xargs)

luego usando esa variable LINE haz:

archivo sed "s$LINEs/abc/zzz/g"

Respuesta4

puedes usar esto

sed -i '4s/old_text/new_text/g' file_name

información relacionada