GNU/Linux >> Tutoriales Linux >  >> Linux

sed - insertar línea después de X líneas después del partido

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 con function_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 (entonces c 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

Linux
  1. ¿Reemplazar el patrón después de encontrar la enésima coincidencia en cada línea?

  2. ¿Reemplazar rango de líneas con rango de líneas (sed u otros)?

  3. ¿Sed On Osx Insert en cierta línea?

  4. ¿Mostrar todas las líneas antes de un partido?

  5. grep coincide solo con líneas en un rango específico

Cómo quitar líneas de un archivo usando el comando Sed

¿Cómo contar el número de líneas en un archivo después de una coincidencia Grep?

Eliminación de líneas específicas de un archivo en la línea de comandos de Linux

Tutorial de Unix Sed:anexar, insertar, reemplazar y contar líneas de archivos

sed para insertar solo en la primera coincidencia

¿Cómo inserto texto en la primera línea de un archivo usando sed?