¿Cómo reemplazar algún contenido específico de un archivo con la primera línea de otro archivo?

¿Cómo reemplazar algún contenido específico de un archivo con la primera línea de otro archivo?

Tengo dos archivos: one.txtysample.txt

one.txttiene los siguientes contenidos:

AAAA
BBBB
CCCC
DDDD

sample.txttiene algunos contenidos específicos como los siguientes:

>>XXXXXXX<<

Cómo puedo:

  1. reemplace "XXXXXXX" con el contenido de la primera línea de one.txt?
  2. eliminar la primera línea del one.txt?
  3. cambiar el nombre one.txta AAAA.txt?

en la línea de comando de Linux?

ingrese la descripción de la imagen aquí

Respuesta1

Aquí hay una forma:

## save the first line of one.txt in the variable $string
string=$(head -n1 one.txt)
## delete the first line of one.txt
sed -i '1d' one.txt
## replace the Xs in `>>XXXXX<<` with the contents of `$string` 
## and save as the new file "$string.txt" (AAAA.txt)
sed "s/>>XXXXXXX<</>>$string<</" sample.txt > $string.txt

Tenga en cuenta que esto supone que solo hay una aparición de >>XXXXXX<<en cualquier línea de sample.txt. Si puede haber más de uno por línea, entonces el comando anterior solo reemplazará el primero en cada línea. Para reemplazarlos todos, use esto en su lugar:

sed "s/>>XXXXXXX<</>>$string<</g" sample.txt > $string.txt

Su pregunta original tenía espacios al final de cada línea one.txt. Si este es el caso de su archivo real y necesita eliminar los espacios antes de agregarlo sample.txt, use esto:

string=$(head -n1 one.txt | sed 's/ *$//')

Luego los mismos comandos que arriba.

información relacionada