Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式搜索除127.0.0.1以外的ip地址_Regex_Linux_Sed - Fatal编程技术网

Regex 使用正则表达式搜索除127.0.0.1以外的ip地址

Regex 使用正则表达式搜索除127.0.0.1以外的ip地址,regex,linux,sed,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 请帮我一下好吗?由于sed不支持负前瞻断言,我建议您使用Perl而不是sed perl -pe 's/\b(?:(?!127\.0\.0\.1)\d{1,3}(?:\.\d{1,3}){3})\b/'"$ip"'/g' file

使用命令行工具,我试图找到除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

请帮我一下好吗?

由于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
通过PCRE动词的Hacky one


假设您的文件中有类似的内容
my\u文件

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
替换为
。然后将
替换为
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

这里使用标准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

awk-v ip='aa.bb.cc.dd'{for(i=1;你能解释一下这个问题吗?
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