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
sed
el comandoa\
(agregar):o incluso
Anexa "
appended line
" después de la línea 1.fuente
sed -i '1 a\\' file
por solo una nueva línea.'1 aapended line'
ejemplo.Supongo que el
sed
enfoque sería:sed '2 i whatever_line_of_text_you_wanted_to_INSERT' filename.txt
Esto 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.txt
fuente
Explicación.
fuente
Esto podría funcionar para usted:
Si desea insertar
something
después de la nueva línea:O si sed maneja
\n
:Por supuesto
a
es aún más fácil:fuente
\n
línea a la línea uno!Usualmente uso
ed
para esto:Similar a una
sed
solució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 elecho
recuento de 4 a 1 en las obrasdash
yksh
tambié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é usarloed
cuandoex
está disponible?Solución Python
fuente
Uso de
sed
có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
printf
yex
:1a
significa "agregar después de la primera línea"; el.
final del anexo;x
significa 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.txt
Mi caso de uso particular es agregar automáticamente una declaración de hoja de estilo xsl a un archivo xml junit.
fuente