2015-05-02 7 views
40

Unter Mac OS 10.10.3 installierte ich Gnu-sed eingeben:Wie GNU unter Mac OS X sed verwenden

brew install gnu-sed --default-names 

Wenn ich es noch einmal eingeben, bekomme ich die Meldung:

Gnu -sed-4.2.2 bereits installiert

Allerdings kann ich auch nach dem Neustart des Systems und dem Neustart von Terminal immer noch nicht die GNU-Version von sed verwenden. Zum Beispiel:

echo a | sed ’s_A_X_i’ 

kehrt: schlecht Flagge in Substitution Befehl 'i'

Was soll ich tun, arbeitet die GNU-Version zu bekommen? Hier sind die Pfade in meiner $ PATH-Variable.

/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 scheint offensichtlich, aber ich lerne Shell-Scripting auf meinem eigenen und nicht ganz noch verstehen, wie UNIX-Programme installiert sind. Irgendeine Hilfe, um GNU-konforme Befehle (in diesem Fall sed, aber bald brauche ich auch andere) auf meinem Mac zu verwenden, ohne Schaden oder unnötige Unordnung zu verursachen, würde sehr geschätzt werden.

+2

Wo hat 'brew' GNU 'sed' installiert? Ist das Verzeichnis auf Ihrem 'PATH'? Was bekommen Sie, wenn Sie 'sed --version' eingeben? (BSD 'sed' wird sich beschweren; GNU' sed' wird seine Versionsinformation melden.) Bis Sie entweder das 'brew'-Verzeichnis auf Ihrem PATH vor'/usr/bin' haben oder Sie lernen, den absoluten Pfadnamen zu GNU 'zu verwenden sed', Sie werden nicht GNU 'sed' laufen lassen. Sei vorsichtig mit Zitaten. '' 'Ist ein Textverarbeitungszitat, anders als' ''. –

Antwort

7

Die sed, die mit OS X geliefert wird, ist in /usr/bin.

Die sed, die homebrew installiert ist in /usr/local/bin.

Wenn Sie die homebrew ein verwenden möchten, haben Sie zwei Möglichkeiten:

Option 1

Jedes Mal, wenn Sie wollen sedhomebrew verwenden, geben Sie

/usr/local/bin/sed 

oder vorzugsweise

Option 2

Verschieben /usr/local/bin/ voraus (d. H. vor) /usr/bin in Ihrer PATH in Ihrem Login-Profil, wie diese

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

Wenn Sie brew install coreutils installieren, werden Sie sed und ein paar andere GNU-Versionen der Dinge bekommen, wie Teer, Datum usw. Diese sind alle installiert in/usr/local/bin und mit dem Präfix 'g' versehen. Wenn Sie also nach der Installation die GNU-Version von sed möchten, geben Sie stattdessen gsed ein. Funktioniert super.

+7

'find/-name gsed' zeigt nichts auf meinem Yosemite-System nach' brew install coreutils'. – weberc2

+10

coreutils enthält keinen sed-Befehl, er sollte von 'brew install gnu-sed' installiert werden. Andere kommen hierher, um auf diesen Link zu verweisen (https://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/) – VicX

0

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

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

Wenn Sie die Gnu-Version sed installieren, für os x mac mit:

brew install gnu-sed 

Das Programm, das Sie verwenden, ist GSED

so zum Beispiel:

╭─[email protected] ~ ‹[email protected]› ‹1.7› ‹SBCL 1.3.0› 
╰─$ echo "Calimero is a little chicken" > test 
╭─[email protected] ~ ‹[email protected]› ‹1.7› ‹SBCL 1.3.0› 
╰─$ cat test 
Calimero is a little chicken 
╭─[email protected] ~ ‹[email protected]› ‹1.7› ‹SBCL 1.3.0› 
╰─$ gsed -i "s/little/big/g" test 
╭─[email protected] ~ ‹[email protected]› ‹1.7› ‹SBCL 1.3.0› 
╰─$ cat test 
Calimero is a big chicken 
58

Sie haben bereits die gnu-sed ohne dieinstalliertOption.

  • Mit --with-default-names Option installiert es sed-/usr/local/bin/
  • Ohne diese Option es gsed

Also in Ihrem Fall installiert, was du tun musst, ist:

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

Aktualisieren p ath, wenn nötig ...

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

oder verwenden gsed wie andere vorgeschlagen.