Cómo usar GNU sed en Mac OS 10.10+, 'brew install --default-names' ya no es compatible

95

En Mac OS 10.10.3, instalé gnu-sed escribiendo:

brew install gnu-sed --default-names

Cuando lo vuelvo a escribir, aparece el mensaje:

gnu-sed-4.2.2 ya instalado

Sin embargo, incluso después de reiniciar el sistema y reiniciar Terminal, todavía no puedo usar la versión GNU de sed. Por ejemplo:

echo a | sed s_A_X_i

devuelve: bandera incorrecta en el comando de sustitución 'i'

¿Qué debo hacer para que funcione la versión GNU? Aquí están las rutas en mi 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 

Lo siento si mi pregunta parece obvia, pero estoy aprendiendo a escribir scripts de shell por mi cuenta y todavía no entiendo cómo se instalan los programas UNIX. Cualquier ayuda para usar comandos compatibles con GNU (en este caso sed, pero pronto necesitaré otros también) en mi Mac sin causar daños o desorden innecesario sería muy apreciado.

usuario3781201
fuente
2
¿Dónde brewinstaló GNU sed? ¿Ese directorio está en tu PATH? ¿Qué obtienes si escribes sed --version? (BSD sedse quejará; GNU sedreportará su información de versión). Hasta que no tenga el brewdirectorio en su PATH antes /usr/bino no aprenda a usar el nombre de ruta absoluto a GNU sed, no estará ejecutando GNU sed. También tenga cuidado con las comillas. es una cita de procesamiento de texto, a diferencia de '.
Jonathan Leffler

Respuestas:

112

Nota (2019):

La --with-default-namesopción se eliminó desde enero de 2019, por lo que ahora esa opción ya no está disponible.

Al instalar, Homebrew instruye sobre cómo adaptar la ruta, si se quiere usar sed sin el gprefijo.


Ya tienes instalado gnu-sed sin la --with-default-namesopción.

  • Con --with-default-namesopción se instala seden/usr/local/bin/
  • Sin esa opción se instala gsed

Entonces, en tu caso, lo que debes hacer es:

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

Actualice la ruta si es necesario ...

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

o utilizar gsedcomo otros sugirieron.

Kashyap
fuente
8
La opción --with-default-names ya no es compatible
Amol
49

Cuando instalas la versión GNU de sedpara Mac OS X usando:

$ brew install gnu-sed

El programa que usa es gsed.

Así por ejemplo:

$ 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

Además, para complementar el uso de las herramientas de comando GNU en Mac OS X, hay una buena publicación de blog aquí para obtener las herramientas de Linux:

Instale y use las herramientas de línea de comandos GNU en Mac OS / OS X

anquegi
fuente
19

El sedque se envía con OS X está en formato /usr/bin.

El sedque se homebrewinstala está en formato /usr/local/bin.

Si prefiere usar el homebrewuno, tiene dos opciones:

Opción 1

Cada vez que quiera usar homebrew sed, escriba

/usr/local/bin/sed

o, preferiblemente

opcion 2

Avanza /usr/local/bin/(es decir, antes) /usr/binen tu RUTA en tu perfil de inicio de sesión, así

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

$ brew install gnu-sed

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

Con estos dos comandos gnu-sed funciona correctamente

K Kishore
fuente
recuerde que esto solo funciona para la sesión de terminal actual
maheshmnj
8

Si necesita usar el comando gnu-sed con sus nombres normales, puede agregar un directorio "gnubin" a su PATH desde su bashrc. Simplemente use el siguiente comando en su bash o terminal.

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

--with-default-namesno funcionó para mí en Mac OS X 10.14.2, así que creé un enlace simbólico llamado seda gsedsuperior en el$PATH

También creé un enlace simbólico llamado sed.1a la página de gsed.1manual más arriba en el $MANPATHmodo que manaccedería a la página de gsedmanual en lugar de la página de sedmanual predeterminada

chipsandslasa
fuente
4
También puede hacer alias, por ejemplo alias sed=gsed.
Kenorb