Adicione informações sob uma linha específica

3

Eu quero saber como eu poderia adicionar arquivos contendo informações sob uma linha específica no arquivo.

Por exemplo, tenho file1.txt com as seguintes linhas:

line 1
line 2
line 3

e file2.txt tem as informações que eu quero adicionar em file1.txt em específico em line 2 .

Como isso poderia ser feito?

    
por iLinux85 09.09.2012 / 17:31

2 respostas

3

Use o comando R [ead] de Sed

Você pode usar o comando r do sed para ler em um arquivo. Por exemplo, para corresponder a linha pelo seu número:

sed '2 r /tmp/file2.txt' /tmp/file1.txt

Ou se você preferir combinar a linha pelo conteúdo:

sed '/^line 2/ r /tmp/file2.txt' /tmp/file1.txt

Este é um comando padrão e não depende de nenhuma extensão GNU, por isso deve funcionar em diferentes implementações de sed.

Os comandos acima imprimem o resultado em sua saída padrão. Se você quiser modificar o arquivo original, adicione a opção -i logo após o sed (isso funcionará no Linux e no Cygwin, mas não em todos os sistemas unix).

    
por 09.09.2012 / 17:42
1

Além de sed , você também pode fazer isso com awk :

awk '1; /line 2/ { while(getline < "file2.txt") print }' file1.txt

Isso irá inserir o conteúdo de file2.txt sempre que line 2 for encontrado.

O 1 é o bloco padrão { print $0 } .

Isso envia sua saída para a saída padrão, se você quiser sobrescrever file1.txt , salve a saída em um arquivo temporário e sobrescreva:

awk '1; /line 2/ { while(getline < "file2.txt") print }' file1.txt > file1.txt.tmp
mv file1.txt.tmp file1.txt

Editar

Para uma correspondência de cadeia fixa, == seria mais fiável, por ex. para coincidir com a string mencionada use este condicional:

awk '1; $0 == "\"zend_extension=/usr/local/Zend/lib/Optimizer-3.3.9/php-5.2.x/ZendOptimizer.so\"" { while(getline < "file2.txt") print }' file1.txt

Observe que isso precisa corresponder à linha inteira.

    
por 09.09.2012 / 18:33