mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 15:18:01 +00:00
33 lines
922 B
Markdown
33 lines
922 B
Markdown
# 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.
|
|
|
|
```bash
|
|
$ 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.
|
|
|
|
```bash
|
|
# 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](https://unix.stackexchange.com/a/131940/5916)
|