我需要编写一个脚本来用其他部分替换文件的一部分。我正在处理数百个文件。
我有一个要添加到一堆文本文件中的命令列表。但在文件中,我在开头有一个通用命令。
我只想用我的命令列表替换命令列表。下面给出了更多信息。
原始文件
%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
我想用来替换的字符
%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
替换为我的命令列表后,我还想删除空行后找到的字符,即以下行并保留空格。
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
答案1
我认为这就是你所需要的:
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
不是逐行替换,而是删除前六行 ( 1,6d
),第七行由用命令插入的新标题替换c
。最后,处理在下一个空行处停止。
如果它给出了预期的输出,请添加选项-i
以直接在文件上执行替换(GNU sed
,适用于 BSD 版本)。