Você quase nunca quer armazenar o conteúdo completo de um arquivo em uma variável em um script de shell Unix. Se você se encontrar fazendo isso, pergunte a si mesmo se existe outra solução. Se você não consegue encontrar um por conta própria, venha aqui e vamos dar uma olhada: -)
$ sed '/propertie/r file.txt' exam.txt
I am expert linux man
what we can do for out country
I love redhat machine
"propertie"
324325
5326436
3245235
646346
545
643
6436
63525
664
46454
centos less then redhat
fedore what
my name is moon yea
O comando r
("read") em sed
aceita um nome de arquivo como argumento e insere o conteúdo do arquivo no fluxo atual.
Se você precisar do conteúdo adicionado recuado, certifique-se de que o conteúdo de file.txt
seja recuado antes de executar sed
:
$ sed 's/^/ /' file.txt >file-ind.txt
$ sed '/propertie/r file-ind.txt' exam.txt
I am expert linux man
what we can do for out country
I love redhat machine
"propertie"
324325
5326436
3245235
646346
545
643
6436
63525
664
46454
centos less then redhat
fedore what
my name is moon yea
Com ed
(chamando sed
para o recuo do arquivo inserido). Isso também faz a edição no local do arquivo e substitui o original pelo conteúdo modificado.
ed -s exam.txt <<END_ED
/propertie/r !sed 's/^/ /' file.txt
wq
END_ED
O comando r
em ed
é capaz de ler a saída de um comando externo se o comando tiver o prefixo !
. Usamos isso para recuar os dados que gostaríamos de inserir. Caso contrário, por razões óbvias, é muito semelhante à solução sed
acima.
A única desvantagem de usar ed
é que você geralmente não pode usá-lo em arquivos muito grandes. sed
é para editar streams de comprimentos indeterminados, enquanto ed
é ok para editar documentos que você pode ver abrindo em qualquer outro editor, ou seja, não arquivos de muitos megabytes ou gigabytes de tamanho.