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?

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

-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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.