开发者

How to escape plus sign on mac os x (BSD) sed?

I'm trying to find and replace one or more occurrences of a character using sed on a mac, sed from the BSD General Commands.

I try:

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

expecting to see:

fbar

But instead I see

foobar

I can of course just expand the plus man开发者_如何学编程ually with:

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

but what do I have to do to get the plus sign working?


Using the /g flag, s/o//g is enough to replace all o occurrences.

Why + doesn't work as expected: in old, obsolete re + is an ordinary character (as well as |, ?). You should specify -E flag to sed to make it using modern regular expressions:

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

Source: man 7 re_format.


Sed is sad for regexes. You could either try the -E, which might work with BSD, or you could try this one instead:

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

Perhaps there are too many sed's out there to have a usable tool on any system.


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

worked for me on Mac OS X 10.6.

I remembered that I replaced my BSD version of sed with GNU sed 4.2, so this may or may not work for you.


You can use this, on linux or unix.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜