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

user3781201
источник
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