如何逃脱加号mac os x(BSD)sed?

Ale*_*son 17 regex macos bash grep sed

我正在尝试使用来自BSD通用命令的sed在mac上查找和替换一个或多个字符的出现.

我尝试:

echo "foobar" | sed -e "s/o+//g
Run Code Online (Sandbox Code Playgroud)

期待看到:

fbar
Run Code Online (Sandbox Code Playgroud)

但相反,我明白了

foobar
Run Code Online (Sandbox Code Playgroud)

我当然可以手动扩展加号:

echo "foobar" | sed -e "s/oo*//g"
Run Code Online (Sandbox Code Playgroud)

但是我需要做些什么才能使加号工作?

kha*_*hik 31

使用该/g标志s/o//g足以替换所有o次出现.

为什么+不按预期工作:在旧的,过时的re +是一个普通的角色(以及|,?).您应该使用现代正则表达式指定-E标志以sed使其成为:

echo "foobar" | sed -E -e "s/o+//"
# fbar
Run Code Online (Sandbox Code Playgroud)

来源:man 7 re_format.