2015-05-02 40 views
40

In Mac OS 10.10.3, ho installato GNU-sed digitando:Come usare GNU sed su Mac OS X

brew install gnu-sed --default-names 

Quando digito ancora una volta, ottengo il messaggio:

gnu -sed-4.2.2 già installato

Tuttavia, anche dopo aver riavviato il sistema e riavviato Terminal, non riesco ancora a utilizzare la versione GNU di sed. Per esempio:

echo a | sed ’s_A_X_i’ 

rendimenti: male bandiera in sostituzione di comando 'i'

Cosa devo fare per ottenere la versione GNU di lavoro? Ecco i percorsi nella mia variabile $ 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 

Mi dispiace se la mia domanda sembra ovvio, ma sto imparando scripting di shell per conto mio e non capisco ancora come si installano programmi UNIX. Qualsiasi aiuto per l'utilizzo di comandi conformi a GNU (in questo caso sed, ma presto avrò bisogno anche di altri) sul mio Mac senza causare danni o confusione non necessaria sarebbe molto apprezzato.

+2

Dove ha fatto 'brew' installare GNU' sed'? Quella directory è sul tuo 'PATH'? Cosa ottieni se digiti 'sed --version'? (BSD 'sed' si lamenterà, GNU' sed' riporterà le sue informazioni sulla versione.) Finché non avrai la directory 'brew' sul tuo PATH prima di'/usr/bin' o imparerai a usare il percorso assoluto per GNU ' sed', non eseguirai GNU 'sed'. Fai attenzione anche alle virgolette. ''' È una citazione per l'elaborazione di testi, diversamente da ''. –

risposta

7

Il sed fornito con OS X è /usr/bin.

Il sed che homebrew installazioni è in /usr/local/bin.

Se si preferisce utilizzare il homebrew uno, si hanno due opzioni:

Opzione 1

Ogni volta che si desidera utilizzare homebrewsed, tipo

/usr/local/bin/sed 

o, preferibilmente

Opzione 2

Avanti /usr/local/bin/ (ad es. prima) /usr/bin nel PATH nel tuo profilo di accesso, come questo

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

Se si installa brew install coreutils, si otterrà sed e un mucchio di altre versioni GNU di cose, come il catrame, data, ecc Questi sono tutti installato in/usr/local/bin e dato il prefisso 'g'. Quindi, dopo l'installazione, se si desidera la versione GNU di sed, digitare invece gsed. Funziona alla grande.

+7

'find/-name gsed' non restituisce nulla sul mio sistema Yosemite dopo' brew install coreutils'. – weberc2

+10

coreutils NON include il comando sed, dovrebbe essere installato da brew install gnu-sed'. Altri vengono qui possono fare riferimento [questo collegamento] (https://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/) – VicX

0

Se è necessario utilizzare il comando gnu-sed con i loro nomi normali, è possibile aggiungere una directory "gnubin" al proprio PERCORSO dalla bascrc . Basta usare il seguente comando nel tuo bash o terminale.

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

quando si installa sed la versione GNU, per Mac OS X utilizzando:

brew install gnu-sed 

Il programma che si utilizza è gsed

così per esempio:

╭─[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

Hai già installato gnu-sed senza il --with-default-names opzione.

  • Con --with-default-names opzione installa sed-/usr/local/bin/
  • Senza questa opzione installa gsed

Quindi nel tuo caso quello che devi fare è:

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

Aggiornamento p ath se necessario ...

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

o utilizzare gsed come altri hanno suggerito.