1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 07:08:01 +00:00
Files
til/sed/osx-sed-does-regex-a-bit-different.md
2021-03-24 09:31:49 -05:00

922 B

OSX sed Does Regex A Bit Different

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

source