Comment utiliser GNU sed sur Mac OS 10.10+, 'brew install --default-names' n'est plus pris en charge


95

Sous Mac OS 10.10.3, j'ai installé gnu-sed en tapant:

brew install gnu-sed --default-names

Quand je le tape à nouveau, je reçois le message:

gnu-sed-4.2.2 déjà installé

Cependant, même après avoir redémarré le système et redémarré Terminal, je ne peux toujours pas utiliser la version GNU de sed. Par exemple:

echo a | sed s_A_X_i

renvoie: mauvais drapeau dans la commande de substitution 'i'

Que dois-je faire pour que la version GNU fonctionne? Voici les chemins dans ma variable $ 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 

Je suis désolé si ma question semble évidente, mais j'apprends le script shell par moi-même et je ne comprends pas encore très bien comment les programmes UNIX sont installés. Toute aide pour utiliser des commandes compatibles GNU (dans ce cas sed, mais j'en aurai bientôt besoin d'autres aussi) sur mon Mac sans causer de dommages ou d'encombrement inutile serait grandement appréciée.


2
Où a brewinstallé GNU sed? Ce répertoire est-il sur votre PATH? Qu'est-ce que vous obtenez si vous tapez sed --version? (BSD sedse plaindra; GNU sedrapportera ses informations de version.) Tant que vous n'aurez pas le brewrépertoire sur votre PATH avant /usr/binou que vous n'aurez appris à utiliser le chemin absolu vers GNU sed, vous n'exécuterez pas GNU sed. Soyez également prudent avec les citations. est une citation de traitement de texte, contrairement à '.
Jonathan Leffler

Réponses:


112

Remarque (2019):

L' --with-default-namesoption est supprimée depuis janvier 2019, donc maintenant cette option n'est plus disponible.

Lors de l'installation, Homebrew explique comment adapter le chemin, si l'on veut utiliser sed sans le gpréfixe.


Vous avez déjà installé gnu-sed sans l' --with-default-namesoption.

  • Avec --with-default-namesoption, il s'installe sedsur/usr/local/bin/
  • Sans cette option, il installe gsed

Donc, dans votre cas, ce que vous devez faire est:

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

Mettre à jour le chemin si nécessaire ...

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

ou utiliser gsedcomme d'autres l'ont suggéré.


8
L'option --with-default-names n'est plus prise en charge
Amol

49

Lorsque vous installez la version GNU de sedpour Mac OS X en utilisant:

$ brew install gnu-sed

Le programme que vous utilisez est gsed.

Donc par exemple:

$ 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

De plus, pour compléter l'utilisation des outils de commande GNU sur Mac OS X, il y a un joli article de blog ici pour obtenir les outils de Linux:

Installer et utiliser les outils de ligne de commande GNU sur Mac OS / OS X


19

Le sedqui est livré avec OS X est en /usr/bin.

Le sedqui homebrewinstalle est dans /usr/local/bin.

Si vous préférez utiliser celui- homebrewci, vous avez deux options:

Option 1

Chaque fois que vous souhaitez utiliser homebrew sed, tapez

/usr/local/bin/sed

ou, de préférence

Option 2

Avancez /usr/local/bin/(c'est-à-dire avant) /usr/bindans votre PATH dans votre profil de connexion, comme ceci

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

16

$ brew install gnu-sed

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

Avec ces deux commandes gnu-sed fonctionne correctement


rappelez-vous que cela ne fonctionne que pour la session de terminal en cours
maheshmnj

8

Si vous avez besoin d'utiliser la commande gnu-sed avec leurs noms normaux, vous pouvez ajouter un répertoire "gnubin" à votre PATH depuis votre bashrc. Utilisez simplement la commande suivante dans votre bash ou votre terminal.

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

2

--with-default-namesne fonctionne pas pour moi sur Mac OS X 10.14.2 donc je créé un lien symbolique nommé sedà gsedplus haut dans la$PATH

J'ai également créé un lien symbolique nommé sed.1vers la gsed.1page de manuel plus haut dans le $MANPATHafin d' manaccéder à la gsedpage de manuel au lieu de la sedpage de manuel par défaut


4
Vous pouvez également faire des alias, par exemple alias sed=gsed.
kenorb
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.