¿Cómo insertar un texto al principio de un archivo?
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 sed
si es posible.
sed
puede operar en una dirección:
$ sed -i '1s/^/<added text> /' file
¿ Qué es esa magia 1s
que 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,}
Si desea agregar una línea al principio de un archivo, debe agregarla \n
al 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
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 sed
seas lo suficientemente moderno) usar:
sed -i 'whatever command you choose' filename
para realizar ediciones in situ.
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.