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

  1. 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
    1. 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
      1. Lemez > PSSGd1
         

        ¡Graciassss!

        0
    2. eloodie
       
      ¡Gracias!
      0
    3. 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
      1. 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
  2. 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
    1. 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
  3. 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
  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
    1. 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
  5. 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
    1. 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
  6. 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
  7. 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
  8. 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
  9. toto
     
    ¿No existe un comando para insertar una línea al principio de un archivo sin pasar por un archivo temporal?
    -2
    1. 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
      1. 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
    2. frans
       
      Simplemente:
      echo -e "línea a insertar\n$(cat data)" > data
      0
  10. 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
  11. 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