
Eu tenho dois arquivos: one.txt
esample.txt
one.txt
tem o seguinte conteúdo:
AAAA
BBBB
CCCC
DDDD
sample.txt
tem alguns conteúdos específicos como o seguinte:
>>XXXXXXX<<
Como posso:
- substitua "XXXXXXX" pelo conteúdo da primeira linha do
one.txt
? - exclua a primeira linha do
one.txt
? - renomear o
one.txt
paraAAAA.txt
?
na linha de comando do Linux?
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.