Adicione o conjunto de comandos no início dos arquivos múltiplos

Adicione o conjunto de comandos no início dos arquivos múltiplos

Preciso escrever um script para substituir uma parte do arquivo por outra. Estou lidando com centenas de arquivos.

Eu tenho uma lista de comandos a serem adicionados a vários arquivos de texto. Mas nos arquivos tenho comandos comuns no início.

Eu simplesmente quero substituir a lista de comandos pela minha lista de comandos. Mais informações são fornecidas abaixo.

Arquivo original

%apj=E:\Work\Informatin\Regarding work\DND.apj
%mem=4GB
%nprocshared=2
#p oyu opsd qtnv/1-a(x) kglgg=uioewr

Application 

0 1
 X                 -3.66480600    0.10278400   -0.00655500
 Y                 -4.11487100    1.45621700   -0.05226200
 Z                 -5.10300200    1.90042600    0.83864800

 1 2 1.0 13 1.0 23 1.0
 2 3 1.5 4 1.5
 3 5 1.5 6 1.0
 4 7 1.5 8 1.0

Caracteres que quero usar para substituir

%apj=D:\Store\Data\Diff All\SMC.apj
%mem=800MB
%nprocshared=4
#p udf AMER hbvn/3-b(n) huggh=whea

Use

0 1
 X                 -3.66480600    0.10278400   -0.00655500
 Y                 -4.11487100    1.45621700   -0.05226200
 Z                 -5.10300200    1.90042600    0.83864800

Depois de substituir pela minha lista de comandos, também quero excluir os caracteres encontrados após uma linha em branco, ou seja, as linhas seguintes e manter o espaço em branco.

1 2 1.0 13 1.0 23 1.0
2 3 1.5 4 1.5
3 5 1.5 6 1.0
4 7 1.5 8 1.0

Responder1

Acho que é disso que você precisa:

sed '1,6d
7c%apj=D:\Store\Data\Diff All\SMC.apj\
%mem=800MB\
%nprocshared=4\
#p udf AMER hbvn/3-b(n) huggh=whea\
\
Use\

/^$/q' filename

Em vez de substituir linha por linha, as primeiras seis linhas são excluídas ( 1,6d) e a sétima é substituída pelo novo cabeçalho, inserido com o ccomando. Finalmente, o processamento é interrompido na próxima linha vazia.

Se der a saída esperada, adicione opção -ipara realizar a substituição diretamente no arquivo (GNU sed, adaptado para versão BSD).

informação relacionada