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.


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.


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


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>

16

$ brew install gnu-sed

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

Con estos dos comandos gnu-sed funciona correctamente


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"

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


4
También puede hacer alias, por ejemplo alias sed=gsed.
Kenorb
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.