Regex 如何在mac os x(BSD)sed上避开加号?
我尝试在mac上使用sed查找并替换一个或多个出现的字符,sed来自BSD常规命令 我尝试:Regex 如何在mac os x(BSD)sed上避开加号?,regex,macos,bash,sed,grep,Regex,Macos,Bash,Sed,Grep,我尝试在mac上使用sed查找并替换一个或多个出现的字符,sed来自BSD常规命令 我尝试: echo "foobar" | sed -e "s/o+//g 期待看到: fbar 但是我看到 foobar 当然,我可以通过以下方式手动扩展plus: echo "foobar" | sed -e "s/oo*//g" 但是我要怎么做才能让加号起作用呢 echo "foobar" | sed -e "s/o\\+//g" 在Mac OS X 10.6上为我工作 我记得我用GNU sed 4
echo "foobar" | sed -e "s/o+//g
期待看到:
fbar
但是我看到
foobar
当然,我可以通过以下方式手动扩展plus:
echo "foobar" | sed -e "s/oo*//g"
但是我要怎么做才能让加号起作用呢
echo "foobar" | sed -e "s/o\\+//g"
在Mac OS X 10.6上为我工作
我记得我用GNU sed 4.2替换了我的BSD版本的sed,所以这可能对您有效,也可能对您无效。使用
/g
标志,s/o//g
足以替换所有出现的o
为什么+
不能按预期工作:在旧的、过时的re+
中是一个普通字符(以及|
,?
)。您应该将-E
标志指定为sed
,以便使用现代正则表达式:
echo "foobar" | sed -E -e "s/o+//"
# fbar
来源:
man7re_格式
Sed对于正则表达式来说是悲哀的。您可以尝试使用-E,这可能与BSD一起使用,也可以尝试使用此选项:
sed -e "s/o\{1,\}/"
也许有太多的sed在任何系统上都没有可用的工具。您可以在linux或unix上使用它
echo "foobar" | perl -pe "s/o+//g"
使用
/g
标志,s/o//g
足以替换所有出现的o
。在Terminal.app中,您可能需要使用双反斜杠。@这也不起作用。有关更多信息,请参阅我的答案。+1,使用-E
标志,它的工作方式与所述相同。但由于某些原因,我在手册/信息页面中找不到。官方看来,-r
和-regexp-extended
选项是可行的。这并不能回答这个问题。若要评论或要求作者澄清,请在他们的帖子下方留下评论-你可以随时在自己的帖子上发表评论,一旦你有足够的评论,你就可以发表评论。使用这些评论可以解决问题,而不必关心逃避问题。