OS X上的sed - 在regexp中似乎​​无法使用+

sti*_*tib 25 regex macos sed

现在根据所有文献

echo 1234abcd|sed "s|[0-9]\+|#|g"
Run Code Online (Sandbox Code Playgroud)

应该输出#abcd.和

echo abcd|sed "s|[0-9]\+|#|g"
Run Code Online (Sandbox Code Playgroud)

应该输出abcd.

但在OS X 10.4.11中,第一个表达式输出1234abcd.使用*代替+用于第一个示例但在第二个示例中失败,输出#abcd,因为[0-9]模式匹配零次.

+运算符在OS X中的正则表达式中不起作用吗?还有其他选择吗?

谢谢

pax*_*blo 53

在OSX上,sed默认情况下使用基本RE.sed -E如果要使用现代RE,则应使用,包括"+"一个或多个运算符.

请参阅此处了解sed默认情况下使用基本RE 的指示,此处为现代RE语法,此处为基本RE(ed)信息.


或者,如果你有一个完全不支持的正则表达式引擎+,你只需使用*转换(例如):

[a-z]+
Run Code Online (Sandbox Code Playgroud)

成:

[a-z][a-z]*
Run Code Online (Sandbox Code Playgroud)

  • 这个答案在技术上是正确的,但是我一直对-E标志感到沮丧,因为它不能移植到通常包含在Linux发行版中的任何sed版本.买者自负. (3认同)

laa*_*lto 8

过时的基本正则表达式不支持+?量词.他们是常规角色.

替代品[0-9]+是例如[0-9]{1,}[0-9][0-9]*.

或者您可以使用sed -E现代的扩展正则表达式.