0

我有一种情况,我想使用 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

任何帮助将不胜感激。

4

3 回答 3

4

GNU 的代码:

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

会话协议:

$猫文件1
启用=是
使用测试=否
UseTempS=否
使用静态=否
IP地址=
子网掩码=
默认网关=

$猫文件2
启用=否
使用测试=否
UseTempS=否
使用静态=否
IP地址=0.0.0.0
子网掩码=255.255.255.0
默认网关=1.1.1.1

$ sed -r 's#(.*)=(.*)#/\1=/s/=.*/=\2/#' file2|sed -f - file1
启用=否
使用测试=否
UseTempS=否
使用静态=否
IP地址=0.0.0.0
子网掩码=255.255.255.0
默认网关=1.1.1.1
于 2013-07-18T09:39:20.410 回答
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
于 2013-07-18T08:17:50.107 回答
-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/
于 2013-07-18T08:11:23.077 回答