Establezca las variables a y b en las líneas en las que desea realizar la sustitución y luego ejecute awk:
a=1; b=5; awk '{ if (NR=='"$a"' || NR=='"$b"') sub("d_int","d_INT",$0); print $0}' 1.txt
En lo anterior, awk verifica si estamos en el número de línea. $a
o en el numero de linea $b
. Si es así, realiza la sustitución.
Parte del truco de usar awk
es proteger el awk
comandos desde el shell. Para hacer esto, el awk
los comandos están entre comillas simples en todas partes, excepto cuando queremos explícitamente que la shell sustituya a for $a
y $b
. $a
y $b
están cada uno en comillas dobles
En su muestra 1.txt
, lo anterior produce:
INTEGER-d_INT ()
INTEGER-d_int ()
INTEGER-d_int ( )
INTEGER-d_intClass()
INTEGER-d_INTClass new()
Enfoque alternativo
sed
También se puede utilizar para esto. El comando sed para cambiar solo la línea 1 es 1 s/d_int/d_INT/
y el sed
El comando para cambiar solo la línea 5 es 5 s/d_int/d_INT/
. Por lo tanto, utilizando la sustitución de shell, un sed
Programa para hacer las sustituciones en líneas. a
y b
es:
a=1; b=5; s='s/d_int/d_INT/' ; sed "$a $s; $b $s" 1.txt
Extensión a un número arbitrario de líneas.
Supongamos que nos suministran una lista arbitraria de lines
Sobre la cual aplicar la sustitución:
lines="1 5 6 9 15 19 20"
s='s/d_int/d_INT/'
for line in $lines
do
echo line=$line
cmd="$line $s; $cmd"
done
echo cmd=$cmd
sed "$cmd" 1.txt