¿Cómo insertar un texto al principio de un archivo?

Resuelto user219882 asked hace 12 años • 21 respuestas

Hasta ahora he podido descubrir cómo agregar una línea al principio de un archivo, pero eso no es exactamente lo que quiero. Lo mostraré con un ejemplo:

Contenido del archivo

some text at the beginning

Resultado

<added text> some text at the beginning

Es similar pero no quiero crear ninguna línea nueva con él...

Me gustaría hacer esto sedsi es posible.

user219882 avatar Mar 02 '12 19:03 user219882
Aceptado

sedpuede operar en una dirección:

$ sed -i '1s/^/<added text> /' file

¿ Qué es esa magia 1sque ves en cada respuesta aquí? ¡Direccionamiento de línea! .

¿ Quieres agregar <added text>las primeras 10 líneas?

$ sed -i '1,10s/^/<added text> /' file

O puedes usar Command Grouping:

$ { echo -n '<added text> '; cat file; } >file.new
$ mv file{.new,}
kev avatar Mar 02 '2012 13:03 kev

Si desea agregar una línea al principio de un archivo, debe agregarla \nal final de la cadena en la mejor solución anterior.

La mejor solución agregará la cadena, pero con la cadena, no agregará una línea al final de un archivo.

sed -i '1s/^/your text\n/' file
Ali Reza Ebadat avatar Feb 05 '2014 10:02 Ali Reza Ebadat

Si el archivo tiene solo una línea, puede usar:

sed 's/^/insert this /' oldfile > newfile

Si es más de una línea. uno de:

sed '1s/^/insert this /' oldfile > newfile
sed '1,1s/^/insert this /' oldfile > newfile

He incluido este último para que sepas cómo hacer rangos de líneas. Ambos "reemplazan" el marcador de la línea de inicio en sus líneas afectadas con el texto que desea insertar. También puedes (suponiendo que sedseas lo suficientemente moderno) usar:

sed -i 'whatever command you choose' filename

para realizar ediciones in situ.

paxdiablo avatar Mar 02 '2012 13:03 paxdiablo

Usar subcapa:

echo "$(echo -n 'hello'; cat filename)" > filename

Desafortunadamente, la sustitución de comandos eliminará las nuevas líneas al final del archivo. Para conservarlos se puede utilizar:

echo -n "hello" | cat - filename > /tmp/filename.tmp
mv /tmp/filename.tmp filename

No se necesita agrupación ni sustitución de mando.

Nick Roz avatar Feb 15 '2019 19:02 Nick Roz