带有负前瞻正则表达式的 Sed 替换

mic*_*ael 2 regex bash sed

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

我试过这个:

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

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

tri*_*eee 6

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

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

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