Як користуватися GNU sed на Mac OS 10.10+, програма "варити встановлення - імена за замовчуванням" більше не підтримується


95

У 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. Будьте обережні і з цитатами. є текстообробна цитата, на відміну від '.
Джонатан Леффлер

Відповіді:


112

Примітка (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

49

При встановленні версії 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


19

У 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" у свій PATH з вашого 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.