Supongamos que desea reemplazar la línea 4 con el texto "diferente". Puedes usar AWK así:
awk '{ if (NR == 4) print "different"; else print $0}' input_file.txt > output_file.txt
AWK considera que la entrada son "registros" divididos en "campos". Por defecto, una línea es un registro. NR
es la cantidad de registros vistos. $0
representa el registro completo actual (mientras que $1
es el primer campo del registro y así sucesivamente; de forma predeterminada, los campos son palabras de la línea).
Entonces, si el número de línea actual es 4, imprima la cadena "diferente" pero de lo contrario imprima la línea sin cambios.
En AWK, el código del programa incluido en { }
ejecuciones una vez en cada registro de entrada.
Debe citar el programa AWK en comillas simples para evitar que el shell intente interpretar cosas como la $0
.
EDITAR: Un programa AWK más corto y elegante de @chepner en los comentarios a continuación:
awk 'NR==4 {$0="different"} { print }' input_file.txt
Solo para el registro (es decir, la línea) número 4, reemplace todo el registro con la cadena "diferente". Luego, para cada registro de entrada, imprima el registro.
¡Claramente mis habilidades de AWK están oxidadas! Gracias, @chepner.
EDITAR: y vea también una versión aún más corta de @Dennis Williamson:
awk 'NR==4 {$0="different"} 1' input_file.txt
Los comentarios explican cómo funciona esto: 1
siempre evalúa verdadero, por lo que el bloque de código asociado siempre se ejecuta. Pero no hay un bloque de código asociado, lo que significa que AWK realiza su acción predeterminada de solo imprimir toda la línea. AWK está diseñado para permitir programas concisos como este.