Redes-Linux.com
Esta página esta optimizada para ser visualizada tanto en navegadores gráficos, como en navegadores de texto.
 
Buscar en:


 
El Servidor
Current bandwidth utilization 0.01 Mbit/s
Ancho de banda utilizado
 
Redes-Linux
 
Tip Today by ugu.com
 
Más cosas
 
Conóceme
 
Nota: Este es un articulo escrito por el administrador de esta misma web (http://www.redes-linux.com).

05/01/2012   Insertar lineas o ficheros al comienzo de otro fichero sin uso de archivos adicionales   03:07 A.M.

Vamos a comenzar a escribir algún que otro artículo, con este Tip que me he visto en la obligación de desarrollar, ante el reto que nos planteamos en la empresa donde trabajo actualmente.

Cuando nos preguntamos como añadir una linea de texto o el contenido de un fichero dentro de otro fichero diferente, sin la necesidad de utilizar ficheros temporales adicionales, nos vienen a la cabeza, hacer uso de la doble redirección ">>":
echo "texto a añadir" >> fichero
cat fichero1 >> fichero2


¿Pero que pasa si queremos añadir la misma linea de texto o un fichero completo, en la primera linea de otro fichero? Si hacemos uso de ficheros temporales, sigue siendo igual de sencillo con el uso de la doble redirección (ej: echo "texto a añadir" >> fichero_temporal && cat fichero >> fichero_temporal && mv fichero_temporal fichero).
Pero si no podemos/queremos hacer uso de ficheros adicionales, no debemos utilizar simplemente la doble redirección, obligandonos a ser un poco más imaginativos. Veamos a ver con este pequeño Tip, como podemos llevar a cabo esa tarea.

Para conseguir ambos retos, deberemos hacer uso de sed en sus ultimas versiones (incluido en cualquier distribución linux, por antigua que sea), ya que en dichas versiones, se añadió la opción "-i" que permite trabajar sobre el fichero original, sin necesidad de volcar la sustitución efectuada por sed en otro fichero o en la salida estandard.

Añadir una linea de texto al comienzo de un fichero (en la primera linea)

Para añadir un texto determinado en un fichero, sin necesidad de hacer uso de ficheros adicionales, basta con ejecutar el siguiente comando:

sed -i "1i Texto que queremos añadir en la primera linea de un fichero" fichero
Si quisieramos insertar el mismo texto en otro linea diferente a la primera, bastaría con cambiar ese "1" por el numero de la linea donde queramos insertar dicho texto.


Añadir un fichero completo al comienzo de otro fichero (en la primera linea)

Si necesitamos insertar un fichero al completo, en la primera linea de otro fichero, deberiamos de ejecutar el siguiente comando:

sed -i '1{h; r fichero_que_vamos_a_volcar_en_el_fichero_final
D; }
2{x; G; }' fichero_final
Con este sistema, tambien podemos volcar el contenido del fichero entre dos lineas diferentes a la primera (tal como hemos hecho en el ejemplo anterior), cambiando esos "1" y "2", por los numeros de lineas entre los que queremos volcar el fichero.


Alternativa para insertar un fichero al comienzo de otro, por "persono"

Tal como nos ha indicado nuestro amigo "persono" en el foro, existe una alternativa para insertar un fichero al comienzo de otro, haciendo uso de printf en lugar de utilizar sed. Para ello, bastaría con ejecutar el siguiente comando:

printf "`cat fichero_que_vamos_a_volcar_en_el_fichero_final`\n`cat fichero_final `\n" > fichero_final
De esta manera, conseguiriamos insertar todo el contenido de un fichero al comienzo de otro, sin perder el contenido del fichero final y sin hacer uso para ello, de ficheros temporales.


Agradecemos enormemente esta alternativa de "persono", ya que dependiendo de la version de sed que dispongamos en nuestros sistemas, puede sernos mas util hacer uso del comando printf (en unix propietarios, la version de sed que viene por defecto, puede ser mas antigua de lo esperado y no soportar ciertos parametros que si los soporta gnu sed).
Si alguien quiere aportar alguna alternativa mas, que no dude en pasarse por el foro, tal como ha hecho nuestro amigo "persono", al que de nuevo, le agradecemos dicho "tip".