sed
pode imprimir um determinado intervalo de linhas com algo parecido com isto:
sed -n 'X,Yp' filename
Em que X
é a primeira linha de um intervalo e Y
é a última linha, ambas inclusivas. -n
informa a sed
para não imprimir nada, a menos que seja explicitamente instruído a fazê-lo e é isso que o p
após o intervalo faz.
Para que você possa chamar isso três vezes, anexando a um arquivo temporário, mova esse arquivo para onde quiser. Você também pode combiná-los usando cat
e substituição de processos como neste exemplo mostra (estou usando números de linha que acabei de retirar do ar; $
é a última linha em um arquivo):
cat <(sed -n '1,5p' file1) <(sed -n '10,12p' file2) <(sed -n '9,$p' file1) > file1.tmp && mv file1.tmp file1
Aqui, substituiríamos as linhas 6, 7 e 8 em file1
pelas linhas 10, 11 e 12 de file2
.
Atualização: graças a @MiniMax para apontar que cat
e a substituição do processo podem ser evitadas fazendo o seguinte:
{ sed -n '1,5p' file1; sed -n '10,12p' file2; sed -n '9,$p' file1; } > file1.tmp && mv file1.tmp file1
KISS, afinal. :)