Jak używać GNU sed w systemie Mac OS 10.10+, opcja „brew install --default-names” nie jest już obsługiwana

97

W systemie Mac OS 10.10.3 zainstalowałem gnu-sed, wpisując:

brew install gnu-sed --default-names

Kiedy wpisuję go ponownie, pojawia się komunikat:

gnu-sed-4.2.2 już zainstalowany

Jednak nawet po ponownym uruchomieniu systemu i ponownym uruchomieniu Terminala nadal nie mogę używać seda w wersji GNU. Na przykład:

echo a | sed ’s_A_X_i’

zwraca: złą flagę w poleceniu podstawienia 'i'

Co powinienem zrobić, aby wersja GNU działała? Oto ścieżki w mojej zmiennej $ 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 

Przepraszam, jeśli moje pytanie wydaje się oczywiste, ale sam uczę się skryptów powłoki i nie do końca rozumiem, jak instalowane są programy UNIX. Jakakolwiek pomoc w używaniu poleceń zgodnych z GNU (w tym przypadku sed, ale wkrótce będę również potrzebować innych) na moim Macu bez powodowania uszkodzeń lub niepotrzebnego bałaganu byłaby bardzo doceniona.

user3781201
źródło
2
Gdzie brewzainstalowałem GNU sed? Czy to twój katalog PATH? Co otrzymasz, pisząc sed --version? (BSD sedbędzie narzekać; GNU sedpoda informacje o swojej wersji). Dopóki nie będziesz mieć przed sobą brewkatalogu na swojej PATH /usr/binlub nie nauczysz się używać bezwzględnej ścieżki dostępu do GNU sed, nie będziesz uruchamiał GNU sed. Uważaj też na cytaty. jest cytatem z edytora tekstu, w przeciwieństwie do '.
Jonathan Leffler

Odpowiedzi:

114

Uwaga (2019):

Ta --with-default-namesopcja została usunięta od stycznia 2019 r., Więc teraz ta opcja nie jest już dostępna.

Podczas instalacji Homebrew instruuje, jak dostosować ścieżkę, jeśli chce się używać seda bez gprefiksu.


Masz już zainstalowany gnu-sed bez --with-default-namesopcji.

  • Z --with-default-namesopcją, seddo której instaluje się/usr/local/bin/
  • Bez tej opcji instaluje się gsed

W twoim przypadku musisz więc:

$ brew uninstall gnu-sed
$ brew install gnu-sed --with-default-names

W razie potrzeby zaktualizuj ścieżkę ...

$ echo $PATH | grep -q '/usr/local/bin'; [ $? -ne 0 ] && export PATH=/usr/local/bin:$PATH
$ echo a | sed 's_A_X_i'

lub użyj gsedzgodnie z sugestiami innych.

Kashyap
źródło
8
Opcja --with-default-names nie jest już obsługiwana
Amol
50

Podczas instalowania wersji GNU seddla Mac OS X przy użyciu:

$ brew install gnu-sed

Program, którego używasz, to gsed.

Na przykład:

$ 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

Ponadto, aby pochwalić użycie narzędzi poleceń GNU w systemie Mac OS X, jest tutaj fajny wpis na blogu, w którym można pobrać narzędzia z systemu Linux:

Zainstaluj i używaj narzędzi wiersza poleceń GNU w systemie Mac OS / OS X

anquegi
źródło
20

To, sedco jest dostarczane z OS X, jest w formacie /usr/bin.

Ten, sedktóry homebrewinstaluje, jest w /usr/local/bin.

Jeśli wolisz korzystać z homebrewtego, masz dwie możliwości:

opcja 1

Za każdym razem, gdy chcesz użyć homebrew sed, wpisz

/usr/local/bin/sed

lub najlepiej

Opcja 2

Przejdź do /usr/local/bin/przodu (tj. Wcześniej) /usr/binw swojej PATH w swoim profilu logowania, w ten sposób

 export PATH=/usr/local/bin:<other places>
Mark Setchell
źródło
Próbowałem tego, ale nie miało to żadnego wpływu
alper
16

$ brew install gnu-sed

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

Z tymi dwoma poleceniami gnu-sed działa poprawnie

K Kishore
źródło
pamiętaj, że działa to tylko dla bieżącej sesji terminala
maheshmnj
8

Jeśli potrzebujesz użyć polecenia gnu-sed z ich normalnymi nazwami, możesz dodać katalog "gnubin" do swojej PATH z twojego bashrc. Po prostu użyj następującego polecenia w swoim bash lub terminalu.

export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
imechemi
źródło
2

--with-default-namesnie działa mi na Mac OS X 10.14.2 więc stworzyłem dowiązania o nazwie sedna gsedwyższy w$PATH

Utworzyłem również dowiązanie symboliczne nazwane sed.1do strony gsed.1podręcznika wyżej w tym, $MANPATHwięc mandostęp do gsedstrony podręcznika zamiast domyślnej sedstrony podręcznika

chipsandslasa
źródło
4
Możesz też zrobić alias np alias sed=gsed.
kenorb