Una posible razón para el comportamiento diferente podría ser que tengas un alias de grep
definido en Linux y no en macOS. Una solución bajo macOS sería agregar un alias de grep
. Otra solución sería agregar un script corto llamado grep
a /usr/local/bin
. Las explicaciones se dan a continuación.
Instalé Ubuntu 24.04 LTS (Linux) en una máquina virtual. Cuando se crea una nueva cuenta de usuario, la carpeta de inicio incluye un archivo ~/.bashrc
por defecto. Las siguientes líneas están incluidas en este archivo.
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
Dado que la shell por defecto es bash
para Ubuntu, la salida de los comandos a continuación produce abc
con la letra b
en rojo. Esto sucede porque grep
está aliased a grep --color=auto
.
echo abc | grep b
A continuación se muestra la salida de ejemplo de una ventana de Terminal de Ubuntu, donde la shell es bash
.
![]()
Ubuntu no tiene zsh
por defecto. Lo instalé ingresando lo siguiente.
apt install zsh
Después de ingresar el comando zsh
por primera vez, se me pidió que llenara mi archivo ~/.zshrc
con la configuración recomendada por el administrador del sistema. Este archivo ~/.zshrc
no contiene aliases. Después de ingresar el comando zsh
, ingresé nuevamente lo siguiente.
echo abc | grep b
A continuación se muestra la salida de ejemplo de una ventana de Terminal de Ubuntu, donde la shell es zsh
.
![]()
Esta vez, la letra b
no estaba en rojo. Por lo tanto, el comportamiento es el mismo que en macOS al usar zsh
, que es la shell por defecto para macOS.
Variables de Entorno
El comando info grep
a menudo produce más detalles que la página de manual. En este caso, lo siguiente existe en info grep
para grep (GNU grep) 3.11
instalado usando Homebrew. Si tu macOS no tiene info
, entonces consulta esta respuesta.
La variable de entorno ‘GREP_OPTIONS’ de ‘grep’ 2.20 y anteriores ya no es compatible, ya que causaba problemas al escribir scripts portables. Para hacer cambios arbitrarios en cómo trabaja ‘grep’, puedes usar un alias o script en su lugar. Por ejemplo, si ‘grep’ está en el directorio ‘/usr/bin’ puedes agregar ‘$HOME/bin’ delante de tu ‘PATH’ y crear un script ejecutable ‘$HOME/bin/grep’ que contenga lo siguiente:
#! /bin/sh
export PATH=/usr/bin
exec grep --color=auto --devices=skip "$@"
Lo anterior me da la siguiente idea de cómo soportar GREP_OPTIONS
para tu versión de grep
instalado en macOS. Realiza los siguientes cambios en macOS.
-
Crea un archivo de script llamado grep
en el directorio /usr/local/bin
. El archivo de script debe contener las líneas dadas a continuación. Si lo deseas, puedes omitir la opción --devices=skip
.
#! /bin/sh
export PATH=/usr/local/opt/grep/libexec/gnubin
eval set -- "$GREP_OPTIONS" "$@"
exec grep --devices=skip "$@"
-
Asegúrate de que el script sea ejecutable ingresando el siguiente comando.
chmod +x /usr/local/bin/grep
-
Asegúrate de que /usr/local/bin
sea el primero en la variable PATH
. Esto debería ser lo predeterminado. A continuación se muestra mi ruta predeterminada al probar en macOS Monterey.
% echo PATH
/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
-
Exporta la variable GREP_OPTIONS
deseada. A continuación se muestra un ejemplo.
export GREP_OPTIONS='--color=auto'
Versiones Instaladas en Ubuntu 24.04 LTS
GNU bash, versión 5.2.21(1)-release (x86_64-pc-linux-gnu)
zsh 5.9 (x86_64-pc-ubuntu-gnu)
grep (GNU grep) 3.11