como substituir algum conteúdo específico de um arquivo pela primeira linha de outro arquivo?

como substituir algum conteúdo específico de um arquivo pela primeira linha de outro arquivo?

Eu tenho dois arquivos: one.txtesample.txt

one.txttem o seguinte conteúdo:

AAAA
BBBB
CCCC
DDDD

sample.txttem alguns conteúdos específicos como o seguinte:

>>XXXXXXX<<

Como posso:

  1. substitua "XXXXXXX" pelo conteúdo da primeira linha do one.txt?
  2. exclua a primeira linha do one.txt?
  3. renomear o one.txtpara AAAA.txt?

na linha de comando do Linux?

insira a descrição da imagem aqui

Responder1

Aqui está uma maneira:

## 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

Observe que isso pressupõe que haja apenas uma ocorrência de >>XXXXXX<<em qualquer linha de sample.txt. Se puder haver mais de um por linha, o comando acima substituirá apenas o primeiro em cada linha. Para substituir todos eles, use isto:

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

Sua pergunta original tinha espaços no final de cada linha one.txt. Se este for o caso do seu arquivo real e você precisar remover os espaços antes de adicionar sample.txt, use isto:

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

Em seguida, os mesmos comandos acima.

informação relacionada