Substitua uma linha pelo texto completo de um segundo arquivo [duplicado]

0

Eu sei como substituir uma linha por outra linha ou várias outras linhas com ferramentas como sed . Mas existe uma maneira fácil de substituir uma linha em um arquivo com todo o conteúdo de um segundo arquivo?

Então, vamos dar um exemplo. Eu tenho um arquivo chamado file1.txt :

A 1
B 2
C 3

E eu tenho um segundo arquivo file2.txt :

line 1
line 2
line 3

Agora, quero substituir line 2 pelo conteúdo total de file1.txt , então, no final, ele deve se parecer com isso

line 1
A 1
B 2
C 3
line 3

Uma maneira de pensar seria algo assim:

sed -i "s/line 2/$(cat file1.txt)/g" file2.txt. 

Mas também preciso verificar alguns caracteres especiais como / e talvez mais. Eu tenho que assumir que todos os caracteres legíveis possíveis podem estar em file1.txt .

Então, voltando à minha pergunta: existe uma maneira fácil de substituir uma linha em um arquivo com todo o conteúdo de um segundo arquivo? Não precisa ser sed . Poderia ser também outra ferramenta, se pudesse fazer o trabalho melhor ...

    
por kristian 16.04.2018 / 12:11

2 respostas

3
sed -e '/^line 2$/{r file1.txt' -e 'd;}' file2.txt

O script sed é

/^line 2$/{
    r file1.txt
    d
}

A nova linha após o nome do arquivo file1.txt é obrigatória, então dividi-la em expressões -e separadas na linha de comando faz com que seja mais legível do que

sed '/^line 2$/{r file1.txt
d;}' file2.txt

O script procura uma linha cujo conteúdo seja line 2 . Quando isso for encontrado, o conteúdo de file1.txt será imediatamente enviado e a linha original será excluída.

Usar sed -i fará as alterações na linha em file2.txt (não recomendado).

    
por 16.04.2018 / 12:26
0

Usando o vi

Vá para a linha e, em seguida:

!!cat filename

Linha atual substituída pelo conteúdo do arquivo.

    
por 16.04.2018 / 12:29