
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 c
comando. Finalmente, o processamento é interrompido na próxima linha vazia.
Se der a saída esperada, adicione opção -i
para realizar a substituição diretamente no arquivo (GNU sed
, adaptado para versão BSD).