Tengo un programa externo que produce un archivo de salida (grande, 20K líneas posibles).
Necesito insertar una nueva línea entre la línea existente 1 y la línea 2. He estado mirando awk y sed - uso uno de los revestimientos en cada uno con bastante regularidad - pero no he podido encontrar los interruptores correctos para hacer esto.
text-processing
sed
awk
Tim Brigham
fuente
fuente

awk 'NR==2 {print "new line"} 1'Para su caso específico, esto debería ser más simple:
Explicación: en la línea 1 , haga lo siguiente
Luego, la línea (vacía ahora) se imprime nuevamente como parte del ciclo.
Si desea agregar una nueva línea en lugar de un nuevo carácter de línea (lo que entendí inicialmente), entonces simplemente use
sedel comandoa\(agregar):o incluso
Anexa "
appended line" después de la línea 1.fuente
sed -i '1 a\\' filepor solo una nueva línea.'1 aapended line'ejemplo.Supongo que el
sedenfoque sería:sed '2 i whatever_line_of_text_you_wanted_to_INSERT' filename.txtEsto llevará el texto a la segunda línea del archivo y luego la segunda línea real en el archivo se convertirá en la tercera.
Tenga en cuenta que, si usa el modo agregar , si tenía que ser así, tenía que usar la primera línea, ya que la adición ocurrirá después del número de línea anotado.
sed '1 a whatever_line_of_text_you_wanted_to_INSERT' filename.txtfuente
Explicación.
fuente
Esto podría funcionar para usted:
Si desea insertar
somethingdespués de la nueva línea:O si sed maneja
\n:Por supuesto
aes aún más fácil:fuente
\nlínea a la línea uno!Usualmente uso
edpara esto:Similar a una
sedsolución, pero sin el desorden de las nuevas líneas escapadas.fuente
echo's, especialmente bajobash:ed - filename <<< $'1a\nLine to insert\n.\nw'.dash, en muchos sistemas/bin/sh.echo". Ahorradores de todaecho's es de hechobashúnica característica, pero reduciendo elechorecuento de 4 a 1 en las obrasdashykshtambién:echo '1a\nLine to insert\n.\nw' | ed - filename.printf %s\\n, que coloca una nueva línea después de cada argumento que le da y no arruina los caracteres especiales incrustados en la línea que desea insertar. Además, ¿por qué usarloedcuandoexestá disponible?Solución Python
fuente
Uso de
sedcódigos de escape ANSI (específicos de Bash):fuente
usaría Python para esto
fuente
Simplemente me gusta usar un contador explícito:
fuente
El método más simple utiliza
printfyex:1asignifica "agregar después de la primera línea"; el.final del anexo;xsignifica guardar y salir.fuente
Ninguna de las respuestas anteriores menciona cómo guardar los cambios en el archivo original, que es lo que el OP estaba pidiendo.
Sin duda es lo que necesitaba cuando camé a la página.
Asumiendo que su archivo se llama
output.txtMi caso de uso particular es agregar automáticamente una declaración de hoja de estilo xsl a un archivo xml junit.
fuente