Reputation: 495
I have a situation where I want to replace multiple line text in a file using sed. The search text is:
Enable=Yes
UseTest=No
UseTempS=No
UseStatic=No
IPAddress=
SubnetMask=
DefaultGateway=
And the text to be replaced is
Enable=No
UseTest=No
UseTempS=No
UseStatic=No
IPAddress=0.0.0.0
SubnetMask=255.255.255.0
DefaultGateway=1.1.1.1
Any help will be appreciated.
Upvotes: 0
Views: 192
Reputation: 3756
Code for GNU sed:
sed -r 's#(.*)=(.*)#/\1=/s/=.*/=\2/#' file2|sed -f - file1
Session protocol:
$ 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
Upvotes: 4
Reputation: 97938
If you want to match those fields in order, as you read them, one portable way:
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
template
Enable=No
UseTest=No
UseTempS=No
UseStatic=No
IPAddress=0.0.0.0
SubnetMask=255.255.255.0
DefaultGateway=1.1.1.1
Upvotes: 0
Reputation: 4511
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/
Upvotes: -1