substitua o conteúdo do arquivo entre números de linha específicos por outro arquivo usando BASH

1

Qual é a maneira mais eficiente de substituir o conteúdo do arquivo entre números de linha específicos por outro arquivo?

Aqui está uma amostra:

main.txt :

a b c
d e f
g h i
j k l

new.part.txt

x y z
p q r
s t u

O bloco de texto que começa na linha 2 e termina na linha 3 de main.txt é substituído por new.part.txt . O arquivo desejado é o seguinte:

a b c
x y z
p q r
s t u
j k l

Esta resposta é para o caso em que o intervalo do bloco desejado é definido através de strings de marcadores. Eu preciso de uma solução que use números de linha para definir o intervalo do bloco desejado.

    
por Kadir 07.02.2014 / 10:23

2 respostas

2

Você não usa bash.

O shell Bourne Again é um shell. Os programas utilitários reais para fazer isso não fazem parte do shell e são amplamente independentes de shell. A resposta de grawity usa recursos de shell, mas principalmente para parametrização.

Veja como fazer isso com ex , editando o arquivo:

ex main.txt << EOT
2,3d
1r new.part.txt
w
EOT

Veja como se faz isso com sed , escrevendo os dados alterados na saída padrão:

sed -e '1r new.part.txt' -e '2,3d' main.txt
    
por 07.02.2014 / 16:34
2
start=2
end=3

{
  head -n $((start-1)) old.txt
  cat new.txt
  tail -n $((end+1)) old.txt
} > merged.txt
    
por 07.02.2014 / 15:32