我正在尝试使用BS上的sed从BSD常规命令中查找和替换一个或多个字符的出现。
我试试:
echo "foobar" | sed -e "s/o+//g
期待看到:
fbar
但相反,我看到了
foobar
我当然可以手动扩展加号:
echo "foobar" | sed -e "s/oo*//g"
但我需要做些什么才能让加号工作?
答案 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"