.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), который использует \(
и \)
для группового захвата, а не только (
и )
, как используется в Extended Regular Expressions (ERE). Поскольку в вашем выражении используется (.*)
вместо \(.*\)
, он не распознается как групповой захват, и, следовательно, для использования с \1
ничего не фиксируется.
В некоторых реализациях sed
, например, предоставляемых GNU и BSD, есть расширение для указания использования ERE, но оно не указано по POSIX, и вы не можете использовать его, если хотите быть переносимым.