.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, и вы не можете использовать его, если хотите быть переносимым.