web-dev-qa-db-fra.com

Comment utiliser GNU sed sur Mac OS 10.10+, la version 'brasser install --default-names' n'est plus prise en charge

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

brew install gnu-sed --default-names

Quand je 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: bad flag 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 tout seul les scripts Shell et je ne comprends pas très bien comment les programmes UNIX sont installés. Toute aide pour utiliser les commandes conformes à GNU (dans ce cas sed, mais bientôt, j'en aurai aussi besoin) sur mon Mac sans causer de dégâts ni d'encombrer inutilement serait grandement appréciée.

77
user3781201

Note (2019):

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

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


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

  • Avec l'option --with-default-names, il installe sed sur /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 utilisez gsed comme suggéré.

99
Kashyap

Lorsque vous installez la version GNU de sed pour Mac OS X à l'aide de:

$ 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

En outre, pour compléter l’utilisation des outils de commande GNU sur Mac OS X, il existe un article sur le blog de Nice qui contient les outils de linux:

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

40
anquegi

La sed fournie avec OS X est dans /usr/bin.

La sed que homebrew installe est dans /usr/local/bin.

Si vous préférez utiliser la variable homebrew, vous avez deux options:

Option 1

A chaque fois que vous souhaitez utiliser homebrewsed, tapez

/usr/local/bin/sed

ou de préférence

Option 2

Déplacez /usr/local/bin/ devant (c'est-à-dire avant) /usr/bin dans votre CHEMIN dans votre profil de connexion, comme ceci

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

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

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

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

Avec ces deux commandes, gnu-sed fonctionne correctement

2
K Kishore

--with-default-names ne fonctionnait pas pour moi sous Mac OS X 10.14.2, j'ai donc créé un lien symbolique nommé sed à gsed plus élevé dans le $PATH.

J'ai également créé un lien symbolique nommé sed.1 vers la page de manuel gsed.1 située plus haut dans le $MANPATH afin que man puisse accéder à la gsed au lieu de la valeur par défaut sed.

1
chipsandslasa