Bash: insertar una línea en un archivo

Johny jon -  
 Lemez -
Hola a todos,

desearía insertar una línea al principio de un archivo. He intentado:
echo hola >> miarchivo.txt

pero, por supuesto, añade hola al final del archivo, mientras que quiero que se añada al principio del archivo.

Si pudieran informarme sobre esto, se los agradecería :)

Gracias de antemano

Johny Jon

11 respuestas

informaticien.re
 
Hola
viejo tema pero en el top de respuestas de este tema
sed inserción de una línea al principio del archivo

como la respuesta no me ha parecido clara
me permito entonces algunas explicaciones
para toda eventualidad

explicación con el uso del comando
mágico SED

sed -i "1i\Añadir esta línea al principio del archivo\n" archivo.txt

sed = Stream EDitor
-i = aplicar directamente al archivo sin archivo temporal
Nota: -i.BAK = creación de un archivo de respaldo archivo.txt.BAK
" = permite el uso de caracteres de escape
y la interpretación de variables en la cadena.
Nota: el uso de ' (comilla simple) desactiva estas funciones.
1=número de línea antes de la cual se insertará el texto
\ = carácter de escape que protege el texto que se insertará
evita que el primer carácter del texto sea interpretado
como un comando/parámetro.
29
PSSGd1
 
De hecho, su comando es incorrecto:
sed -i '1iSalut' essai.txt se convierte en: sed -i 1i'Salut' essai.txt

Sé que estoy haciendo un UP de varios años, pero a mí me ha servido,
Atentamente
0
Lemez > PSSGd1
 

¡Graciassss!

0
eloodie
 
¡Gracias!
0
hevoilajegalèrencor Mensajes publicados 11 Fecha de registro   Estado Miembro Última intervención  
 
hola, desentier el tema porque se complican con los pedidos particulares y dedicados. un ECHO hace el trabajo:

echo "mi texto" >> mi_archivo

eso es todo, beso
0
zipe31 Mensajes publicados 34620 Fecha de registro   Estado Colaborador Última intervención   6 501 > hevoilajegalèrencor Mensajes publicados 11 Fecha de registro   Estado Miembro Última intervención  
 
Hola,

En tu caso, solo necesitas aprender a leer ;-(

intenté lo siguiente:
echo bonjour >> monfichier.txt

pero, por supuesto, añade bonjour al final del archivo, mientras que yo quisiera agregarlo al principio del archivo.
1
jipicy Mensajes publicados 40842 Fecha de registro   Estado Moderador Última intervención   4 898
 
Hola,

Puedes hacer esto con el filtro "sed", es muy simple y todo c*n :
[jp@Mandrake tmpfs]$ cat essai.txt Hola a todos, aquí quiero insertar una línea al principio de un archivo. He intentado con: echo bonjour >> monfichier.txt pero, por supuesto, lo añade al final del archivo, mientras que me gustaría añadirlo al principio del archivo. Bueno, si pudieran informarme, les estaría muy agradecido :) Gracias de antemano Johny Jon [jp@Mandrake tmpfs]$ sed -i '1iSalut' essai.txt [jp@Mandrake tmpfs]$ cat essai.txt Salut Hola a todos, aquí quiero insertar una línea al principio de un archivo. He intentado con: echo bonjour >> monfichier.txt pero, por supuesto, lo añade al final del archivo, mientras que me gustaría añadirlo al principio del archivo. Bueno, si pudieran informarme, les estaría muy agradecido :) Gracias de antemano Johny Jon [jp@Mandrake tmpfs]$
En resumen, para insertar un texto antes de una línea se da su dirección, aquí la línea 1, seguida del parámetro "i" (para insertar).
La opción "-i" de "sed -i", está ahí únicamente para escribir directamente en el archivo sin pasar por un archivo temporal.

--
Z'@+...che.
JP : Zen, my Nuggets ! ;-) El conocimiento solo es bueno si se comparte. 
12
Johny jon
 
Hola,

intenté el comando sed como en tu ejemplo, pero el resultado que obtengo en mi archivo es:

1isalut
Bonjour,
1isalut
test para ver


Me inserta 1isalut entre cada línea. Estoy tratando de modificarlo, pero si alguien tiene una respuesta, también la agradecería :)

Gracias a todos
0
chuchyyy
 
cp monfichier.txt temp0001.tmp
echo hola > monfichier.txt
cat temp0001.tmp >>monfichier.txt
rm temp0001.tmp

Aquí está la solución final.

Ciao

Guillaume
4
tom
 

sed 1i"mensaje" archivo

yo estoy jodido para poner un mensaje al principio de cada línea porque sed i"mensaje" archivo escribe el mensaje entre cada línea y no al principio de cada línea :(
2
jipicy Mensajes publicados 40842 Fecha de registro   Estado Moderador Última intervención   4 898
 
Hola,

Leer primero ;-))

Para tu caso, retomando tus palabras :
[jp@MDK tmpfs]$ cat fich.txt es : sed 1i"mensaje" archivo estoy jodido para poner un mensaje al principio de cada línea porque sed i"mensaje" archivo escribe el mensaje entre cada línea y no al principio de cada línea :( [jp@MDK tmpfs]$ sed 's/.*/Mensaje &/' fich.txt Mensaje es : Mensaje sed 1i"mensaje" archivo Mensaje Mensaje estoy jodido para poner un mensaje al principio de cada línea Mensaje porque sed i"mensaje" archivo escribe el mensaje Mensaje entre cada línea Mensaje y no al principio de cada línea :( [jp@MDK tmpfs]$
;-))

--
Z'@+...che.
JP : Tranquilo, mis Nuggets ! ;-) El conocimiento solo es valioso si se comparte.
0
sam3000 Mensajes publicados 1226 Estado Miembro 144
 
lo siento, respondí en DOS (aunque querías en BASH)
bueno, olvidé Linux (hace 5 años que no lo toco)
pero en resumen
ren -> para renombrar o mover (mv??)
type -> cat
del -> eliminar un archivo (unln, erase???)
--
El error es humano pero un verdadero desastre
solo puede ser informático.
0
Johny jon
 
Hola Sam,

lol ok veo el truco. Complicado para algo tan pequeño : al menos con la programación no me hago tantas preguntas :)

Gracias de nuevo por tu ayuda :)
0
sam3000 Mensajes publicados 1226 Estado Miembro 144
 
de nada,
pero si puedes poner una solución funcional para bash, ¡eso podría ayudar a los demás después!
(es para el futuro)
y si todo funciona, no olvides cerrar el post
@+
--
El error es humano, pero un verdadero desastre
solo puede ser informático.
-2
jipicy Mensajes publicados 40842 Fecha de registro   Estado Moderador Última intervención   4 898
 
Por favor, da el comando exacto que escribes.
También muestra la versión de "sed" (sed -V).
--
Z'@+...che.
JP : Zen, mis Nuggets ! ;-) El conocimiento solo es bueno si se comparte. 
-2
Botojo Mensajes publicados 9 Estado Miembro 51
 
Hola,
Para añadir una línea al principio del archivo:

cp lefichier.txt temp
cat - temp <<< "Swing la bacaisse dans le fond d'la boite à bois "> lefichier.txt

...
...
...
rm temp

Esta es la método que yo utilizo
¡Buena suerte!
-2
toto
 
¿No existe un comando para insertar una línea al principio de un archivo sin pasar por un archivo temporal?
-2
toto
 
Bueno, aparentemente no. Se debe al sistema de archivos..

O entonces habría que jugar directamente con los i-nodos...


Si alguien tiene una solución de todos modos.
0
Gaston > toto
 
La respuesta es :

sed -i 1i"primera línea" archivo.txt

Y si quieres insertar en la octava línea :
sed -i 8i"primera línea" archivo.txt

La opción -i indica que se debe modificar el archivo.
Si no la pones, saldrá el resultado en la salida estándar (en la pantalla).

Sugeriría trabajar con sed sin la opción -i para preparar tu jugada y luego, cuando estés seguro de ti mismo... finalizas añadiendo la opción -i.
0
frans
 
Simplemente:
echo -e "línea a insertar\n$(cat data)" > data
0
sam3000 Mensajes publicados 1226 Estado Miembro 144
 
Hola
debes hacer esto en 4 pasos:

 ren monfichier.txt temp0001.tmp echo hola >monfichier.txt type temp0001.tmp >>monfichier.txt del temp0001.tmp 


si no entiendes el truco, pregúntame, te lo explico.

--
El error es humano pero un verdadero desastre
solo puede ser informático.
-3
chuchyyy
 
De hecho, no existe un comando BASH para insertar una línea al principio. Sin embargo, para añadir al final sí.
Lo que hizo fue copiar el archivo. Creó otro y añadió tu línea. Luego puso al final todas las líneas de tu primer archivo.

¿Está claro, no? jaja

¡Hasta luego!

Guillaume
-3