Come usare GNU sed su Mac OS X.

Sotto Mac OS 10.10.3, ho installato gnused digitando:

brew install gnu-sed --default-names 

Quando scrivo di nuovo, 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' 

restituisce: flag errato nel comando di sostituzione ‘i’

Cosa devo fare per far funzionare la versione GNU? 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 ovvia, ma sto imparando lo scripting della shell da solo e non capisco ancora come siano installati i 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.

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

  • Con l’opzione --with-default-names installa sed in /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 

Aggiorna percorso se necessario …

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

oppure utilizzare gsed come suggerito da altri.

Quando si installa sed la versione di gnu, per mac os x si utilizza:

 brew install gnu-sed 

Il programma che usi è gsed

quindi per esempio:

 $ 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 

Anche per complimentarmi con l’uso degli strumenti di comando di gnu su mac OSX, c’è un bel post sul blog per ottenere gli strumenti da Linux:

Installa e usa gli strumenti della riga di comando GNU su macOS / OS X

Il sed che viene fornito con OS X si trova in /usr/bin .

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

Se preferisci usare quello homebrew , hai due opzioni:

opzione 1

Ogni volta che vuoi usare homebrew sed , digita

 /usr/local/bin/sed 

o, preferibilmente

opzione 2

Sposta /usr/local/bin/ ahead (cioè prima) /usr/bin nel tuo PATH nel tuo profilo di login, come questo

  export PATH=/usr/local/bin: 

Se brew install coreutils , avrai sed e un sacco di altre versioni GNU di cose, come tar, date, ecc. Queste sono tutte installate in / usr / local / bin e dato il prefisso ‘g’. Quindi dopo l’installazione, se vuoi la versione GNU di sed, gsed invece gsed . Funziona alla grande.

Se hai bisogno di usare il comando gnu-sed con i loro nomi normali, puoi aggiungere una directory “gnubin” al tuo PATH dal tuo bashrc. Basta usare il seguente comando nel tuo bash o terminale.

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