Reemplazar cadena basada en número de línea

50

Tengo una situación en la que quiero reemplazar una cadena particular en muchos archivos

Reemplace una cadena AAA con otra cadena BBB pero hay muchas cadenas que comienzan con AAA o terminan en AAA, y quiero reemplazar solo una en la línea 34 y mantener otras intactas.

¿Es posible especificar por número de línea, en todos los archivos esta cadena está exactamente en la línea 34?

krypto
fuente

Respuestas:

82

Puede especificar el número de línea en sed o NR (número de registro) en awk.

awk 'NR==34 { sub("AAA", "BBB") }'

o use FNR (registro de número de archivo) si desea especificar más de un archivo en la línea de comando.

awk 'FNR==34 { sub("AAA", "BBB") }'

o

sed '34s/AAA/BBB/'

para hacer un reemplazo en el lugar con sed

sed -i '34s/AAA/BBB/' file_name
VanagaS
fuente
-3

supongamos que desea reemplazar la tercera línea en el archivo_record:

sed -i "s/`head -3 file_record | tail -1 `/replaced/" file_record
RAMAN
fuente
use la cita anterior antes de la cabeza y después de -1 ... aquí no lo está tomando
RAMAN
1
Esto simplemente no va a funcionar. Necesita un escape pesado. ¿Y qué pasa si la tercera línea está duplicada en otro lugar?
Sparhawk