用sed替换多行

时间:2013-07-18 08:03:20

标签: sed

我有一种情况,我想用sed替换文件中的多行文本。 搜索文本是:

Enable=Yes
UseTest=No
UseTempS=No
UseStatic=No
IPAddress=
SubnetMask=
DefaultGateway=

要替换的文字是

Enable=No
UseTest=No
UseTempS=No
UseStatic=No
IPAddress=0.0.0.0
SubnetMask=255.255.255.0
DefaultGateway=1.1.1.1

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:4)

GNU代码

sed -r 's#(.*)=(.*)#/\1=/s/=.*/=\2/#' file2|sed -f - file1

会话协议:

$ cat file1
Enable=Yes
UseTest=No
UseTempS=No
UseStatic=No
IPAddress=
SubnetMask=
DefaultGateway=

$ cat file2
Enable=No
UseTest=No
UseTempS=No
UseStatic=No
IPAddress=0.0.0.0
SubnetMask=255.255.255.0
DefaultGateway=1.1.1.1

$ sed -r 's#(.*)=(.*)#/\1=/s/=.*/=\2/#' file2|sed -f - file1
Enable=No
UseTest=No
UseTempS=No
UseStatic=No
IPAddress=0.0.0.0
SubnetMask=255.255.255.0
DefaultGateway=1.1.1.1

答案 1 :(得分:0)

如果您想按顺序匹配这些字段,请阅读它们,一种便携式方式:

sed -e   '/Enable=Yes/!b;N;
   /UseTest=No/!b;N;     
   /UseTempS=No/!b;N;    
   /UseStatic=No$/!b;N;  
   /IPAddress=$/!b;N;    
   /SubnetMask=$/!b;N;   
   /DefaultGateway=$/!b; 
   s/.*//;rtemplate' input

<强>模板

Enable=No
UseTest=No
UseTempS=No
UseStatic=No
IPAddress=0.0.0.0
SubnetMask=255.255.255.0
DefaultGateway=1.1.1.1

答案 2 :(得分:-1)

cat yourfile.txt | sed -f zarmacimamadzaghli.sed

<强> zarmacimamadzaghli.sed

s/Enable=Yes/Enable=No/
s/UseTest=No/UseTest=No/
s/UseTempS=No/UseTempS=No/
s/UseStatic=No/UseStatic=No/
s/IPAddress=/IPAddress=0.0.0.0/
s/SubnetMask=/SubnetMask=255.255.255.0/
s/DefaultGateway=/DefaultGateway=1.1.1.1/