Как использовать 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. Отлично работает.