Come utilizzare GNU sed su Mac OS 10.10+, "brew install --default-names" non è più supportato


95

In Mac OS 10.10.3, ho installato gnu-sed digitando:

brew install gnu-sed --default-names

Quando lo digito di nuovo, ricevo 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 vengono installati i programmi UNIX. Qualsiasi aiuto per usare i comandi conformi a GNU (in questo caso sed, ma presto avrò bisogno anche di altri) sul mio Mac senza causare danni o confusione inutile sarebbe molto apprezzato.


2
Dove ha brewinstallato GNU sed? Quella directory è sul tuo PATH? Cosa ottieni se digiti sed --version? (BSD sedsi lamenterà; GNU sedriporterà le informazioni sulla sua versione.) Finché non avrai la brewdirectory sul tuo PATH prima /usr/bino non imparerai a usare il percorso assoluto per GNU sed, non eseguirai GNU sed. Fai attenzione anche alle citazioni. è una citazione di elaborazione di testo, a differenza di '.
Jonathan Leffler

Risposte:


112

Nota (2019):

L' --with-default-namesopzione è stata rimossa da gennaio 2019, quindi ora quell'opzione non è più disponibile.

Durante l'installazione, Homebrew istruisce su come adattare il percorso, se si desidera utilizzare sed senza il gprefisso.


Hai già gnu-sed installato senza l' --with-default-namesopzione.

  • Con l' --with-default-namesopzione si installa sedin/usr/local/bin/
  • Senza questa opzione si 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'

o utilizzare gsedcome altri suggeriscono.


8
L'opzione --with-default-names non è più supportata
Amol

49

Quando installi la versione GNU di sedper Mac OS X utilizzando:

$ 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

Inoltre, per completare l'uso degli strumenti di comando GNU su Mac OS X, c'è un bel post sul blog qui per ottenere gli strumenti da Linux:

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


19

Quello sedfornito con OS X è in /usr/bin.

Il sedche homebrewinstalla è in /usr/local/bin.

Se preferisci usare homebrewquello, hai due opzioni:

opzione 1

Ogni volta che vuoi usare homebrew sed, digita

/usr/local/bin/sed

o, preferibilmente

opzione 2

Vai /usr/local/bin/avanti (cioè prima) /usr/binnel tuo PERCORSO nel tuo profilo di accesso, in questo modo

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

16

$ brew install gnu-sed

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

Con questi due comandi gnu-sed funziona correttamente


ricorda che funziona solo per l'attuale sessione del terminale
maheshmnj

8

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. Usa semplicemente il seguente comando nella tua bash o terminale.

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

2

--with-default-namesnon ha funzionato per me su Mac OS X 10.14.2 così ho creato un link simbolico chiamato sedal gsedpiù alto nel$PATH

Ho anche creato un collegamento simbolico denominato sed.1alla gsed.1pagina di manuale più in alto in $MANPATHmodo manda accedere alla gsedpagina di manuale invece della sedpagina di manuale predefinita


4
Puoi anche fare alias, ad es alias sed=gsed.
kenorb
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.