Как использовать GNU sed в Mac OS 10. 10+, "brew install --default-names" больше не поддерживается
В Mac OS 10.10.3 я установил gnu-sed, набрав:
brew install gnu-sed --default-names
Когда я набираю его снова, я получаю сообщение:
gnu-sed-4.2.2 уже установлен
Однако, даже после перезагрузки системы и перезапуска терминала, я все еще не могу использовать версию sed. Например:
echo a | sed ’s_A_X_i’
возвращает:
bad flag в команде подстановки 'i'
Что мне делать, чтобы получить версию GNU?
Вот пути в переменной $PATH.
/Users/WN/-myUnix
/opt/local/bin
/opt/local/sbin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/Applications/calibre.app/Contents/MacOS
/opt/ImageMagick/bin
/usr/texbin
Прошу прощения, если мой вопрос кажется очевидным, но я сам изучаю сценарий оболочки и еще не совсем понимаю, как устанавливаются программы UNIX. Любая помощь в использовании команд, совместимых с GNU (в этом случае sed, но скоро мне понадобятся и другие) на моем Mac, не причиняя ущерба или ненужного беспорядка, будет очень благодарна.
Ответы
Ответ 1
Примечание (2019):
Опция --with-default-names
удалена с января 2019 года, поэтому теперь эта опция больше не доступна.
При установке Homebrew инструктирует, как адаптировать путь, если вы хотите использовать sed без префикса g
.
У вас уже есть установленный gnu-sed без опции --with-default-names
.
- С опцией
--with-default-names
он устанавливает sed
в /usr/local/bin/
- Без этой опции он устанавливает
gsed
Так что в вашем случае, что вам нужно сделать, это:
$ brew uninstall gnu-sed
$ brew install gnu-sed --with-default-names
Обновить путь при необходимости...
$ echo $PATH | grep -q '/usr/local/bin'; [ $? -ne 0 ] && export PATH=/usr/local/bin:$PATH
$ echo a | sed 's_A_X_i'
или используйте gsed
как предлагали другие.
Ответ 2
При установке GNU-версии sed
для Mac OS X используется:
$ brew install gnu-sed
Программа, которую вы используете, gsed
.
Так, например:
$ echo "Calimero is a little chicken" > test
$ cat test
Calimero is a little chicken
$ gsed -i "s/little/big/g" test
$ cat test
Calimero is a big chicken
Кроме того, чтобы дополнить использование инструментов команд GNU в Mac OS X, здесь есть хороший пост в блоге, где можно получить инструменты из linux:
Установите и используйте инструменты командной строки GNU в Mac OS/OS X
Ответ 3
sed
, который поставляется с OS X, находится в /usr/bin
.
sed
, который устанавливается homebrew
, находится в /usr/local/bin
.
Если вы предпочитаете использовать homebrew
один, у вас есть два варианта:
Вариант 1
Каждый раз, когда вы хотите использовать homebrew
sed
, введите
/usr/local/bin/sed
или, предпочтительно
Вариант 2
Переместите /usr/local/bin/
вперед (т.е. раньше) /usr/bin
в свой PATH в вашем профиле входа, например
export PATH=/usr/local/bin:<other places>
Ответ 4
Если вам нужно использовать команду gnu-sed с их обычными именами, вы
может добавить каталог "gnubin" в ваш PATH из вашего bashrc. Просто используйте следующую команду в своем bash или терминале.
export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
Ответ 5
--with-default-names
у меня не работал на Mac OS X 10.14.2, поэтому я создал символическую ссылку с именем sed
для gsed
выше в $PATH
Я также создал символическую ссылку с именем sed.1
на man- gsed.1
выше в $MANPATH
чтобы man
gsed
доступ к man- gsed
вместо man- gsed
sed
по умолчанию.
Ответ 6
$ brew install gnu-sed $ export PATH = "/usr/local/opt/gnu-sed/libexec/gnubin: $ PATH"
С этими двумя командами GNU-SED работает правильно
Ответ 7
Если вы установите brew install coreutils
, вы получите sed и кучу других версий GNU, таких как tar, date и т.д. Все они установлены в /usr/local/bin и заданы префикс 'g', Поэтому, после установки, если вы хотите версию sed, вы наберете gsed
. Отлично работает.