13

我写了下面的 sed 一行来替换 IP 地址的第三部分。

sed 's/192\.168\.[0-9]*\.\([0-9]*\)/192.168.15.\1/g'

192.168.0.1
192.168.15.1

我想让它变得懒惰,因此它将替换192.168.0192.168.15使用??扩展的正则表达式,但是当我提供“-r”选项时,我收到以下错误。

$ sed -r 's/192\.168\.[0-9]*\.\([0-9]*\)/192.168.15.\1/g'
sed: -e expression #1, char 44: invalid reference \1 on `s' command's RHS

你能解释一下这里发生了什么以及如何在使用捕获组时使表达式变得懒惰吗?

注意:我可以使用许多不同的方法来实现示例,我的问题不是如何解决示例。我对将 sed 与扩展的正则表达式和捕获组一起使用很感兴趣。

4

1 回答 1

12

无需转义大括号,因为([0-9]*)是匹配符号组的有效语句。

$> echo "192.168.0.1" | sed -r 's/192\.168\.[0-9]*\.([0-9]*)/192\.168\.15\.\1/g'
192.168.15.1
于 2012-10-29T20:19:55.733 回答