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

时间:2010-12-15 19:01:45

标签: regex macos bash sed grep

我正在尝试使用BS上的sed从BSD常规命令中查找和替换一个或多个字符的出现。

我试试:

echo "foobar" | sed -e "s/o+//g

期待看到:

fbar

但相反,我看到了

foobar

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

echo "foobar" | sed -e "s/oo*//g"

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

4 个答案:

答案 0 :(得分:28)

使用/g标记,s/o//g足以替换所有o次出现。

为什么+无法按预期工作:旧的,过时的重新+是普通字符(以及|,{{1} }})。您应该为?指定-E标志,以使用现代正则表达式:

sed

来源:echo "foobar" | sed -E -e "s/o+//" # fbar

答案 1 :(得分:2)

echo "foobar" | sed -e "s/o\\+//g"

在Mac OS X 10.6上为我工作。

我记得我用GNU sed 4.2替换了我的BSD版本的sed,所以这可能适用于你也可能不适用。

答案 2 :(得分:1)

Sed对正则表达式感到难过。你可以试试-E,这可能适用于BSD,或者你可以试试这个:

sed -e "s/o\{1,\}/"

也许有太多的sed可以在任何系统上使用可用的工具。

答案 3 :(得分:0)

您可以在linux或unix上使用它。

echo "foobar" | perl -pe "s/o+//g"