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"
精彩评论