Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何在mac os x(BSD)sed上避开加号?_Regex_Macos_Bash_Sed_Grep - Fatal编程技术网

Regex 如何在mac os x(BSD)sed上避开加号?

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

我尝试在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.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
选项是可行的。这并不能回答这个问题。若要评论或要求作者澄清,请在他们的帖子下方留下评论-你可以随时在自己的帖子上发表评论,一旦你有足够的评论,你就可以发表评论。使用这些评论可以解决问题,而不必关心逃避问题。