Home > Net >  change of ip address using perl or sed
change of ip address using perl or sed

Time:08-05

I've an input file that consists of IP Address and subnet masks. As an example,

1.example.com,10.135.10.111,255.255.255.0,some comment
2.example.com,10.135.10.112,255.255.255.0,some comment
3.example.com,10.135.10.113,255.255.255.0,some comment
4.example.com,10.135.10.11,255.255.255.0, some comment
10.135.10.111 A 
10.135.10.112 A
10.135.10.113 A
10.135.10.11  A

I loop the IP address in my bash script and when using the perl or sed command all .11 gets changed. As an example:

inputip=10.135.10.11
newip=10.135.10.77

perl -i -e 's/$inputip/$newip/g' inputfile

OR

sed -e "s/$inputip/$newip/g" inputfile

The problem is all instance of .11 gets changed. so the above record of 10.135.10.111 is changed to 10.135.10.771, .772, .773, .77

Note: this line 10.135.10.11 A is not necessarily the last line, it's anywhere in the file.

CodePudding user response:

Input:

$ cat inputfile
1.example.com,10.135.10.111,255.255.255.0,some comment
2.example.com,10.135.10.112,255.255.255.0,some comment
3.example.com,10.135.10.113,255.255.255.0,some comment
4.example.com,10.135.10.11,255.255.255.0, some comment
4.example.com,210.135.10.11,255.255.255.0, some comment
10.135.10.111 A
10.135.10.112 A
10.135.10.113 A
10.135.10.11  A
210.135.10.11 A

With GNU sed and word boundary flags (\< / \>):

$ inputip=10.135.10.11
$ newip=10.135.10.77
$ sed "s/\<$inputip\>/$newip/g" inputfile
1.example.com,10.135.10.111,255.255.255.0,some comment
2.example.com,10.135.10.112,255.255.255.0,some comment
3.example.com,10.135.10.113,255.255.255.0,some comment
4.example.com,10.135.10.77,255.255.255.0, some comment
4.example.com,210.135.10.11,255.255.255.0, some comment
10.135.10.111 A
10.135.10.112 A
10.135.10.113 A
10.135.10.77  A
210.135.10.11 A

If this does not work then OP is likely not using GNU sed; in this case we'd need to know what version of sed is in use (eg, sed --version).

CodePudding user response:

Using GNU sed

$ sed 's/10.135.10.11\>/10.135.10.77/' input_file

or

$ sed "s/$inputip\>/$newip/g" input_file

Output

1.example.com,10.135.10.111,255.255.255.0,some comment
2.example.com,10.135.10.112,255.255.255.0,some comment
3.example.com,10.135.10.113,255.255.255.0,some comment
4.example.com,10.135.10.77,255.255.255.0, some comment
10.135.10.111 A 
10.135.10.112 A
10.135.10.113 A
10.135.10.77  A
  • Related