GNU/Linux >> Tutoriales Linux >  >> Linux

insertar el contenido de un archivo a otro (en una línea específica del archivo que se envía) -BASH/LINUX

Probablemente usaría sed para este trabajo:

line=3
sed -e "${line}r file2" file1

Si desea sobrescribir file1 y tienes GNU sed , agrega el -i opción. De lo contrario, escriba en un archivo temporal y luego copie/mueva el archivo temporal sobre el original, limpiando según sea necesario (ese es el trap cosas de abajo). Nota:copiar el temporal sobre el archivo conserva los enlaces; mover no lo hace (pero es más rápido, especialmente si el archivo es grande).

line=3
tmp="./sed.$$"
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
sed -e "${line}r file2" file1 > $tmp
cp $tmp file1
rm -f $tmp
trap 0

Solo por diversión y porque a todos nos encanta ed , el editor estándar, aquí hay un ed versión. Es muy eficiente (ed es un genuino editor de texto)!

ed -s file2 <<< $'3r file1\nw'

Si el número de línea se almacena en la variable line entonces:

ed -s file2 <<< "${line}r file1"$'\nw'

Solo para complacer a Zack, aquí hay una versión con menos bashism, en caso de que no te guste bash (personalmente, no me gustan las tuberías y subcapas, prefiero herestrings, pero bueno, como dije, eso es solo para complacer a Zack):

printf "%s\n" "${line}r file1" w | ed -s file2

o (para complacer a Sorpigal):

printf "%dr %s\nw" "$line" file1 | ed -s file2

Como menciona Jonathan Leffler en un comentario, y si tiene la intención de usar este método en un script, use un heredoc (generalmente es el más eficiente):

ed -s file2 <<EOF
${line}r file1
w
EOF

¡Espero que esto ayude!

PD No dude en dejar un comentario si siente que necesita expresarse sobre las formas de conducir ed , el editor estándar.


cat file1 >>file2

agregará el contenido del archivo 1 al archivo 2.

cat file1 file2

concatenará archivo1 y archivo2 y enviará la salida a la terminal.

cat file1 file2 >file3

creará o sobreescribirá archivo3 con la concatenación de archivo1 y archivo2

cat file1 file2 >>file3

agregará la concatenación del archivo 1 y el archivo 2 al final del archivo 3.

Editar :

Para troncalizar el archivo2 antes de agregar el archivo1:

sed -e '11,$d' -i file2 && cat file1 >>file2

o para hacer un archivo de 500 líneas:

n=$((500-$(wc -l <file1)))
sed -e "1,${n}d" -i file2 && cat file1 >>file2

Linux
  1. Uso avanzado del visor de archivos de menos texto en Linux

  2. Cómo encontrar el paquete que proporciona un archivo específico en Linux

  3. Uso de Google Drive desde la línea de comandos de Linux

  4. Eliminación de líneas específicas de un archivo en la línea de comandos de Linux

  5. 4 herramientas para descargar cualquier archivo usando la línea de comandos en Linux

Cómo ver el contenido de un archivo o archivo comprimido en Linux

Ver el contenido de un archivo en la línea de comandos de Linux

¿Herramienta para obtener las líneas en un archivo que no están en otro?

¿Cómo insertar texto antes de la primera línea de un archivo?

5 comandos para ver el contenido de un archivo en la línea de comandos de Linux

Linux:grep desde ciertas líneas hasta el final del archivo