.bash_profile sed: \1 не определен в RE

Я должен настроить локальную среду веб-разработки на моей OS X 10.9 и установить Homebrew. Следующий шаг в моем руководстве говорит мне добавить логику к моему ~/.bash_profile с помощью следующей команды:

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

Когда я вхожу в терминал, я получаю:

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

Это export PATH=/usr/local/bin:/usr/local/sbin:$PATH это должно быть написано в мой .bash_profile? И почему я получаю эту ошибку?

1 ответ

Решение

Вы должны использовать \(.*\) вместо (.*),

sed по умолчанию использует Basic Regular Expressions (BRE), который использует \( а также \) для захвата группы, а не только ( а также ) как используется в расширенных регулярных выражениях (ERE). Так как ваше выражение используется (.*) вместо \(.*\), он не распознается как групповой захват, и, таким образом, ничего не захватывается для использования с \1,

Немного sed Реализации, такие как предоставляемые GNU и BSD, имеют расширение для определения использования ERE, но оно не указано в POSIX, и вы не можете использовать его, если хотите быть переносимым.

Другие вопросы по тегам