Как использовать GNU sed в Mac OS X

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

brew install gnu-sed --default-names 

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

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

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

 echo a | sed 's_A_X_i' 

return: 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, не причиняя ущерба или ненужного беспорядка.

У вас уже установлен 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 как предложили другие.

Когда вы устанавливаете sed в версию gnu, для 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 OSX, есть хороший блог-пост здесь, чтобы получить инструменты от linux:

Установка и использование инструментов командной строки GNU на macOS / OS X

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: 

Если вы установите brew install coreutils , вы получите sed и кучу других версий GNU, таких как tar, date и т. Д. Все они установлены в / usr / local / bin и заданы префиксом «g». Поэтому, после установки, если вы хотите версию sed, вы должны ввести gsed . Прекрасно работает.

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

 export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH" 
  • OS X sed -E не принимает расширенные регулярные выражения
  • Используйте sed, чтобы заменить все обратные косые черты косой чертой
  • Как убить все процессы, соответствующие имени?
  • Новые строки в sed на Mac OS X
  • Рекурсивно переименовывать файлы с помощью find и sed
  • sed заменить переменной на несколько строк
  • Как выводить только захваченные группы с sed?
  • Удаление символов, отличных от ASCII, из CSV
  • Поиск файлов с похожим именем в папку
  • Как добавить к концу строки, содержащие шаблон с sed или awk?
  • Пакетное переименование файлов в каталоге с помощью sed
  • Interesting Posts
    Давайте будем гением компьютера.