regex - 使用扩展正则表达式和捕获组的 sed

标签 regex sed

我编写了以下 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 与扩展的正则表达式和捕获组一起使用很感兴趣。

最佳答案

不需要转义大括号,因为 ([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

关于regex - 使用扩展正则表达式和捕获组的 sed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13128955/

相关文章:

java 正则表达式 : finding a pattern of one character s follows by 5 digits range 0-9

regex - 强制正则表达式匹配值的第一个字母为大写

regex - 一行正好两个大写单词

regex - 使用 sed,识别文本文件中的正确行并将三个不同部分写入单独的变量

regex - 用换行符/段落标记替换所有空格以制作单词列表

bash - 从模式匹配中删除直到下一个模式

javascript - 如何替换不包括特定单词的字符串?

javascript - 尝试组合排除和包含正则表达式

JavaScript 正则表达式 "Nothing to repeat"错误

linux - sed:打印带有时间和 ls -altr info 的目录树