Sed替换为负前瞻性正则表达式

时间:2017-08-31 22:46:33

标签: regex bash sed

我有一个用例将attribute ::添加到字段name_ [0-9] [0-9]:但是某些字段已经有了属性::, 所以我只需要添加attribtue :: to name_ [0-9] [0-9]:没有后跟属性::

我试过这个:

sed  -n  's/name_[0-9][0-9]:(?!attribute::)/&attribute::/p' out

我在网上正则表达式调试器上测试正则表达式应该是我需要的,但实际上如果我给name_01这不匹配:abc

2 个答案:

答案 0 :(得分:3)

“在线正则表达式调试器”通常不会告诉您他们测试哪种精确的正则表达式方言;如果他们告诉你,你需要知道你的sed支持哪种方言。

您正在尝试使用我所知道的任何sed中不支持的Perl正则表达式功能,但当然,它在Perl中得到了非常好的支持。

perl -ne 's/name_[0-9][0-9]:(?!attribute::)/$&attribute::/ and print' out

答案 1 :(得分:1)

{{1,2,3,},{4,5,6,},}

$ cat file1 name_12: name_34:attribute:: name_56: $ sed '/:attribute::/n; s/name_[0-9][0-9]:/&attribute::/g' file1 name_12:attribute:: name_34:attribute:: name_56:attribute:: :阅读下一行。