Как использовать GNU sed в Mac OS 10.10+, 'brew install --default-names' больше не поддерживается


98

В Mac OS 10.10.3 я установил gnu-sed, набрав:

brew install gnu-sed --default-names

Когда я набираю его снова, я получаю сообщение:

gnu-sed-4.2.2 уже установлен

Однако даже после перезагрузки системы и перезапуска Терминала я все еще не могу использовать GNU-версию sed. Например:

echo a | sed ’s_A_X_i’

возвращает: плохой флаг в команде подстановки '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 без ущерба или ненужного беспорядка будет очень признательна.


2
Куда brewустановили GNU sed? Этот каталог у вас PATH? Что вы получите, если наберете sed --version? (BSD sedбудет жаловаться; GNU sedсообщит информацию о своей версии.) Пока вы либо brewзаранее не укажете каталог в вашем PATH, /usr/binлибо вы не научитесь использовать абсолютный путь к GNU sed, вы не будете работать с GNU sed. Будьте осторожны и с цитатами. - это цитата из текстового редактора, в отличие от '.
Джонатан Леффлер

Ответы:


114

Примечание (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как предлагали другие.


8
не вариант --with-умолчанию наименованиями больше не поддерживается
Āmol

51

Когда вы устанавливаете версию 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


20

То, 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>

Я пробовал это, но это не повлияло
альпер

16

$ brew install gnu-sed

$ export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"

С этими двумя командами gnu-sed работает правильно


помните, что это работает только для текущего сеанса терминала
maheshmnj

8

Если вам нужно использовать команду gnu-sed с их обычными именами, вы можете добавить каталог «gnubin» в свой путь из вашего bashrc. Просто используйте следующую команду в вашем bash или терминале.

export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"

2

--with-default-namesне работает для меня на Mac OS X 10.14.2 поэтому я создал символическую ссылку с именем , sedчтобы gsedвыше в$PATH

Я также создал символическую ссылку с именем sed.1на gsed.1станицу руководства выше в $MANPATHтак manбы получить доступ к gsedсправочной странице , вместо по умолчанию sedстраницы руководства


4
Вы также можете использовать псевдоним, например alias sed=gsed.
kenorb
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.