With GNU sed, \+
, \?
, \(...\)
and friends are considered extended regex
characters. You can use them directly with the preceding backslashes. Or you
can include the -r
flag to turn on extended regex and use them without.
$ echo '11+1 = 12' | sed 's/1+/3/'
131 = 12
$ echo '11+1 = 12' | sed -r 's/1+/3/'
3+1 = 12
With OSX sed, \+
, \?
, and \|
are not interpreted as part of the basic
regex. To use them at all you need to include -E
to turn on extended regex.
The capture characters (\(...\)
) are available with basic regex.
# Basic, always treated as literal +
$ echo '11+1 = 12' | sed 's/1+/3/'
131 = 12
$ echo '11+1 = 12' | sed 's/1\+/3/'
131 = 12
# Extended, + is now a meta-character
$ echo '11+1 = 12' | sed -E 's/1+/3/'
3+1 = 12
$ echo '11+1 = 12' | sed -E 's/1\+/3/'
131 = 12