Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
805 views
in Technique[技术] by (71.8m points)

regex - 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 manually with:

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

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

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...