sed '/function_1(/,/^[[:space:]]*}/ {
,/^[[:space:]]*}/ a\
Line that\
you want to\
insert (append) here
}' YourFile
- insertar la línea después del
}
(solo en la línea con algo de espacio antes) de la sección que comienza confunction_1(
- Supongo que no hay
}
solo en su código interno como en su muestra
tenga cuidado con la selección basada en el nombre de la función porque podría usarse (y normalmente lo es) como una llamada a la función en sí misma en otra sección de código, por lo que tal vez un /^void function_1()$/
es mejor
No cuentes, empareja:
sed -e '/^void function_1()/,/^}$/ { /^}$/a\
TEXT TO INSERT
}' input
Esto mira el bloque entre la declaración y la llave de cierre, y luego agrega TEXT_TO_INSERT después de la llave de cierre.
Usar awk:
awk '1;/function_1/{c=4}c&&!--c{print "new text"}' file
1
es una abreviatura de{print}
, por lo que se imprimen todas las líneas del archivo- cuando el patrón coincida, establezca
c
a 4 - cuando
c
llega a 1 (entoncesc
es verdadero y!--c
es verdadero), inserte la línea
Podrías simplemente usar !--c
pero agregando el cheque para c
ser cierto también significa que c
no sigue disminuyendo más allá de 0.
Prueba esto con GNU sed:
sed "/function_1/{N;N;N;a new_text
}" filename