Cómo usar GNU sed en Mac OS X

Bajo Mac OS 10.10.3, instalé gnused escribiendo:

brew install gnu-sed --default-names 

Cuando lo vuelvo a escribir, recibo 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 de GNU de sed. Por ejemplo:

 echo a | sed 's_A_X_i' 

devuelve: bad flag en el comando de sustitución ‘i’

¿Qué debo hacer para que funcione la versión de 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 

Lamento que mi pregunta parezca obvia, pero estoy aprendiendo scripts de shell por mi cuenta y todavía no entiendo muy bien cómo están instalados los progtwigs de 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ño o desorden innecesario sería muy apreciado.

Ya tiene el gnu-sed instalado sin la opción --with-default-names .

  • Con la opción --with-default-names , instala sed en /usr/local/bin/
  • Sin esa opción, instala gsed

Entonces en tu caso lo que tienes que hacer es:

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

Actualizar 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 use gsed como otros sugirieron.

Cuando instala sed la versión gnu, para mac os x usando:

 brew install gnu-sed 

El progtwig que usas está 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 

También para complementar el uso de las herramientas de comando gnu en mac OSX, hay una buena publicación en el blog aquí para obtener las herramientas de Linux:

Instalar y utilizar herramientas de línea de comandos de GNU en macOS / OS X

El sed que se envía con OS X está en /usr/bin .

El sed que instala homebrew está en /usr/local/bin .

Si prefiere usar el homebrew , tiene dos opciones:

Opción 1

Cada vez que quiera usar sed homebrew , escriba

 /usr/local/bin/sed 

o, preferiblemente

opcion 2

Mueva /usr/local/bin/ ahead (es decir, antes) /usr/bin en su PATH en su perfil de inicio de sesión, como este

  export PATH=/usr/local/bin: 

Si instala brew install coreutils , obtendrá sed y un montón de otras versiones GNU de cosas, como tar, date, etc. Todas están instaladas en / usr / local / bin y tienen el prefijo ‘g’. Entonces, después de la instalación, si quieres la versión de GNU de sed, deberías escribir gsed en gsed lugar. Funciona genial.

Si necesita usar el comando gnu-sed con sus nombres normales, puede agregar un directorio “gnubin” a su PATH desde su bashrc. Solo usa el siguiente comando en tu bash o terminal.

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