.bash_profile sed: \1 not defined in the RE

SedHomebrew.Bash Profile

Sed Problem Overview


I've to set up a local web development environment on my OS X 10.9 and installed Homebrew. Next step in my guide tells me to add logic to my ~/.bash_profile with the following command:

echo "export PATH=\$(echo \$PATH | sed 's|/usr/local/bin||; s|/usr/local/sbin||; s|::|:|; s|^:||; s|(.*)|/usr/local/bin:/usr/local/sbin:\1|')" >> ~/.bash_profile && source ~/.bash_profile

When I enter it in the terminal I get:

sed: 1: "s|/usr/local/bin||; s|/ ...": \1 not defined in the RE

Is it export PATH=/usr/local/bin:/usr/local/sbin:$PATH that should be written to my .bash_profile? And why do I get that error?

Sed Solutions


Solution 1 - Sed

You should use \(.*\) instead of (.*).

sed uses Basic Regular Expressions (BRE) by default, which uses \( and \) for group capturing, not just ( and ) as used in Extended Regular Expressions (ERE). Since your expression used (.*) instead of \(.*\), it is not recognised as a group capture, and thus nothing is captured for use with \1.

Some sed implementations, such as the ones provided by GNU and BSD, do have an extension for specifying the use of ERE, but it is not specified by POSIX, and you cannot use it if you want to be portable.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionleymannxView Question on Stackoverflow
Solution 1 - SedChris Jester-YoungView Answer on Stackoverflow