Jimmy
Jimmy

Reputation: 495

Replacing multiple lines with sed

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

Answers (3)

captcha
captcha

Reputation: 3756

Code for GNU :

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

perreal
perreal

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

David Jashi
David Jashi

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

Related Questions