Sobrescrever linha específica no arquivo 2 com conteúdo do arquivo 1 [fechado]

3

Eu tenho dois arquivos (o arquivo 1 contém apenas uma linha; o arquivo 2 contém vários). Eu quero substituir a quinta linha no arquivo 2 com a única linha presente no arquivo 1. Qual seria a melhor maneira de fazer isso?

    
por Dan 04.06.2016 / 06:34

2 respostas

3

printf e ed combinados são uma excelente ferramenta para edição de arquivos com script.

printf '%s\n' '5r file1' 5d w | ed file2

Isso usa ed para editar file2 . O comando printf canaliza cada um dos seus argumentos para ed , um por vez, com um avanço de linha ou nova linha ( \n ) entre cada comando.

Os comandos ed são:

  • 5r file1 - insira o conteúdo de file1 após linha 5
  • 5d - deletar linha 5
  • w - escreve o file2 alterado de volta no disco. Sem isso, as alterações serão descartadas quando ed sair (ou seja, sair sem salvar).
por 04.06.2016 / 11:45
1
vim /path/to/file1 -c '5' -c 'delete 1' -c '4' -c 'read /path/to/file2' -c 'w /path/to/file3' -c 'q!'

Isso usará vim para abrir file1 , vá para a quinta linha, exclua-o, insira o conteúdo de file2 onde a linha costumava estar e salve o resultado em um novo arquivo, file3 .

    
por 04.06.2016 / 07:06