> For the complete documentation index, see [llms.txt](https://ploegert.gitbook.io/til/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ploegert.gitbook.io/til/tools/sed/osx-sed-does-regex-a-bit-different.md).

# 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)
