linux sed 替换

我想用linux sed工具实现对某个文件下的某个具体配置的修改,于是执行类似以下命令:
sed -i -r "s/^abcdx{0,1}/abcdyy/" /etc/test.conf
现在有个疑问:该正则表达式替换功能中的{}之间是表示x字符出现的次数范围的,0次或者1次,那么在具体实现替换操作时sed是如何去实现替换的,例如:/etc/test.conf文件中有这么一行配置abcdxx,上面替换执行后是如何去替换的,是先匹配x字符0次情况还是只匹配x字符1次情况实现具体替换。具体替换过程是怎样的?想知道这块机制,有清楚的大虾请给予解释,感谢!

阅读 4.7k
1 个回答

正则表达式:/^abcdx{0,1}/ 展开如下:

  • abcd
  • abcdx

知道了展开式,你就知道文档中字符串该如何替换了,也就是说,找到跟上面两个字符串一样的字符串,就会替换。

至于你说的 abcdxx,是匹配 abcd 还是匹配 abcdx,那就涉及到正则表达式中的重复出现字符是贪婪的还是非贪婪的,默认情况是贪婪的,也就是最大化的匹配。所以 abcdxx, 被替换成 abcdyyx。

其实,你的正则表达式可以优化一下,可以写的更简洁,/^abcdx?/,其中 ? 表示0次或者1次。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题