使用正则表达式搜索除127.0.0.1之外的IP地址

时间:2014-12-27 13:20:48

标签: regex linux sed

使用命令行工具,我试图找到除127.0.0.1之外的任何IP地址并替换为新的ip。我尝试使用sed

sed 's/\([0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}\)\(?!127.0.0.1\)/'$ip'/g' file

请你能帮帮我吗?

3 个答案:

答案 0 :(得分:5)

由于sed不支持负前瞻断言,我建议你使用Perl代替sed。

perl -pe 's/\b(?:(?!127\.0\.0\.1)\d{1,3}(?:\.\d{1,3}){3})\b/'"$ip"'/g' file

示例:

$ cat file
122.54.23.121
127.0.0.1 125.54.23.125
$ ip="101.155.155.155"
$ perl -pe 's/\b(?:(?!127\.0\.0\.1)\d{1,3}(?:\.\d{1,3}){3})\b/'"$ip"'/g' file
101.155.155.155
127.0.0.1 101.155.155.155

Hacky one通过PCRE动词(*SKIP)(*F)

$ perl -pe 's/\b127\.0\.0\.1\b(*SKIP)(*F)|\b\d{1,3}(?:\.\d{1,3}){3}\b/'"$ip"'/g' file
101.155.155.155
127.0.0.1 101.155.155.155

答案 1 :(得分:2)

假设您的文件my_file

中有类似内容
127.0.0.1 192.152.30.1
158.30.254.1 127.0.0.1
158.40.253.10 127.0.0.1

您可以尝试下面的命令行

sed -r 's/127.0.0.1/########/g;s/[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}/MY_NEW_IP/g;s/########/127.0.0.1/g' my-file

我假设您的文件中没有########

将所有127.0.0.1替换为########,然后定位所有将替换新ip的IP地址。然后将########替换为127.0.0.1

结果

127.0.0.1 MY_NEW_IP
MY_NEW_IP 127.0.0.1
MY_NEW_IP 127.0.0.1

如果要替换变量,请确保双引号

 sed -r "................................." my_file

答案 2 :(得分:2)

这里使用标准的unix工具是awk版本:

awk -v ip='aa.bb.cc.dd' '{for (i=1; i<=NF; i++) 
       if ($i != "127.0.0.1" && $i ~ /\<[0-9]{1,3}(\.[0-9]{1,3}){3}\>/) $i=ip} 1' file
127.0.0.1 aa.bb.cc.dd
aa.bb.cc.dd 127.0.0.1
aa.bb.cc.dd 127.0.0.1

cat file
127.0.0.1 192.152.30.1
158.30.254.1 127.0.0.1
158.40.253.10 127.0.0.1