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

Mak*_*par 4 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
Run Code Online (Sandbox Code Playgroud)

你能帮帮我吗?

Avi*_*Raj 5

由于sed不支持负前瞻断言,我建议你使用Perl而不是sed.

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

例:

$ 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)