Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
753 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 Reply

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...