Bei Verwendung von GNU sed unter Mac OS 10.10+ wird "Brew Install - Default-Names" nicht mehr unterstützt


94

Unter Mac OS 10.10.3 habe ich gnu-sed installiert, indem ich Folgendes eingegeben habe:

brew install gnu-sed --default-names

Wenn ich es erneut tippe, erhalte ich folgende Meldung:

gnu-sed-4.2.2 bereits installiert

Selbst nach dem Neustart des Systems und dem Neustart des Terminals kann ich die GNU-Version von sed immer noch nicht verwenden. Beispielsweise:

echo a | sed s_A_X_i

Rückgabe: schlechtes Flag im Substitutionsbefehl 'i'

Was soll ich tun, damit die GNU-Version funktioniert? Hier sind die Pfade in meiner Variablen $ 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 

Es tut mir leid, wenn meine Frage offensichtlich erscheint, aber ich lerne Shell-Scripting selbst und verstehe noch nicht ganz, wie UNIX-Programme installiert sind. Jede Hilfe bei der Verwendung von GNU-kompatiblen Befehlen (in diesem Fall sed, aber bald brauche ich auch andere) auf meinem Mac, ohne Schaden oder unnötige Unordnung zu verursachen, wäre sehr dankbar.


2
Wo wurde brewGNU installiert sed? Ist das Verzeichnis auf Ihrem PATH? Was bekommen Sie, wenn Sie tippen sed --version? (BSD sedwird sich beschweren; GNU sedwird seine Versionsinformationen melden.) Bis Sie entweder das brewVerzeichnis in Ihrem PATH vor sich haben /usr/binoder lernen, den absoluten Pfadnamen für GNU zu verwenden sed, wird GNU nicht ausgeführt sed. Seien Sie auch vorsichtig mit Zitaten. ist im Gegensatz zu einem Textverarbeitungszitat '.
Jonathan Leffler

Antworten:


112

Anmerkung (2019):

Die --with-default-namesOption wurde seit Januar 2019 entfernt, sodass diese Option jetzt nicht mehr verfügbar ist.

Bei der Installation weist Homebrew an, wie der Pfad angepasst werden muss, wenn sed ohne gPräfix verwendet werden soll.


Sie haben den gnu-sed bereits ohne die --with-default-namesOption installiert .

  • Mit --with-default-namesOption installiert es sedauf/usr/local/bin/
  • Ohne diese Option wird es installiert gsed

In Ihrem Fall müssen Sie also Folgendes tun:

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

Pfad bei Bedarf aktualisieren ...

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

oder gsedwie von anderen vorgeschlagen verwenden.


8
--with-default-names Option wird nicht mehr unterstützt
Amol

49

Wenn Sie die GNU-Version von sedfür Mac OS X installieren mit:

$ brew install gnu-sed

Das Programm, das Sie verwenden, ist gsed.

Also zum Beispiel:

$ 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

Um die Verwendung von GNU-Befehlstools unter Mac OS X zu ergänzen, gibt es hier einen schönen Blog-Beitrag, in dem Sie die Tools unter Linux herunterladen können:

Installieren und verwenden Sie GNU-Befehlszeilentools unter Mac OS / OS X.


19

Das sedmit OS X gelieferte ist in /usr/bin.

Das sed, was homebrewinstalliert wird , ist in /usr/local/bin.

Wenn Sie die eine bevorzugen homebrew, haben Sie zwei Möglichkeiten:

Option 1

Jedes Mal , die Sie verwenden möchten homebrew sed, geben Sie

/usr/local/bin/sed

oder vorzugsweise

Option 2

Gehen Sie in Ihrem PATH in Ihrem Login-Profil wie folgt /usr/local/bin/vor (dh vorher)/usr/bin

 export PATH=/usr/local/bin:<other places>

15

$ brew install gnu-sed

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

Mit diesen beiden Befehlen funktioniert gnu-sed ordnungsgemäß



8

Wenn Sie den Befehl gnu-sed mit ihren normalen Namen verwenden müssen, können Sie Ihrem PATH von Ihrem bashrc aus ein "gnubin" -Verzeichnis hinzufügen. Verwenden Sie einfach den folgenden Befehl in Ihrer Bash oder Ihrem Terminal.

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

2

--with-default-namesnicht für mich auf Mac OS X 10.14.2 arbeiten , so habe ich einen Symlink namens sedzu gsedhöher in der$PATH

Ich habe auch einen Symlink erstellt, der sed.1zu der gsed.1Manpage höher in der Manpage benannt ist , $MANPATHdamit manauf die gsedManpage anstelle der Standard- sedManpage zugegriffen werden kann


4
Sie können auch einen Alias ​​erstellen, z alias sed=gsed.
Kenorb
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.