使用sed替换使用正则表达式的IP

时间:2014-11-24 16:10:15

标签: regex macos sed

假设一个简单的文本文件:

123.123.123.123

我想用222.222.222.222替换其中的IP。我尝试过以下但没有任何改变,但是相同的正则表达式似乎有效in this Regexr

sed -i '' 's/(\d{1,3}\.){3}\d{1,3}/222.222.222.222/' file.txt

我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

这里有两个问题:

  • sed不喜欢PCRE数字属性\d,使用范围:[0-9]或POSIX [[:digit:]]
  • 您还需要使用-r标志来扩展正则表达式。

这应该有效:

s='123.123.123.123'
sed -r 's/([0-9]{1,3}\.){3}[0-9]{1,3}/222.222.222.222/' <<< "$s"
222.222.222.222

最好使用锚点来避免匹配意外输入:

sed -r 's/^([0-9]{1,3}\.){3}[0-9]{1,3}$/222.222.222.222/' <<< "$s"

PS:在OSX上使用-E代替-r

sed -E 's/^([0-9]{1,3}\.){3}[0-9]{1,3}$/222.222.222.222/' <<< "$s"
222.222.222.222

答案 1 :(得分:1)

你最好使用-r,如anubhava所示。

但是如果你没有它,你必须逃避每一个(){}。另外,使用[0-9]代替\d

$ sed 's/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/222.222.222.222/' <<< "123.123.123.123"
222.222.222.222