假设一个简单的文本文件:
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
我错过了什么吗?
答案 0 :(得分:1)
这里有两个问题:
\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