Me gustaría escribir un script en sed para insertar una línea en un archivo después de todas las líneas similares en el archivo. Entonces necesito localizar la última coincidencia para un patrón e insertarlo inmediatamente después. Es muy poco probable que esta sea la última línea del archivo.
He visto una serie de soluciones que emplean múltiples llamadas canalizadas para sed o utilizan otras herramientas como tac. Estos no son apropiados: necesito una solución sed pura que pueda integrarse dentro de un script más grande que realice otros cambios en el mismo archivo.
He estado buscando durante un tiempo, pero sospecho que no es posible. ¡Pensé en preguntar aquí antes de rendirme!
En caso de que los detalles específicos ayuden a explicar, quiero ubicar la última directiva "Incluir" en un archivo Apache http.conf e insertar otra debajo de la última.
Respuestas:
Técnicamente, el siguiente script (mínimamente probado) parece hacer lo que necesita. El principio es almacenar líneas en el espacio de espera; cuando
include
se encuentra una línea, imprima todas las líneas acumuladas y limpie el espacio de espera; al final de la entrada, anteponganew
las líneas acumuladas e imprima.Es poco probable que se integre bien en un script sed existente. Realmente estás estirando las habilidades de sed allí.
Un archivo de configuración de Apache se adapta fácilmente a la memoria. No use un editor de transmisión, cárguelo en una herramienta decente como Perl o Python, o al menos awk.
fuente
Probablemente haya una solución real en
sed
que alguien más intervendrá, pero hace mucho tiempo resolví el mismo escenario con este truco.Coloqué un pequeño "marcador" de comentario en el punto en el archivo de configuración que quería que se insertara algo nuevo con un script. Decir:
Luego puede usar la búsqueda simple y reemplazarla con esa cadena como parámetro de búsqueda y reemplazarla con su nueva inclusión MÁS la línea de comentarios original.
fuente