Opción de color predeterminado de Grep

11

grep es uno de los comandos más utilizados en linux. Me parece que su característica básica es resaltar la cadena que buscó en las líneas de salida. Esto se puede lograr con la opción --color.

Escribir --color cada vez es molesto y tampoco productivo. ¿Hay alguna forma de cambiar grep para comportarse como grep --color.

Intenté escribir un pequeño script llamado grepd y agregué esto a mi variable PATH. Pero el script no funciona en la entrada grepd . Cualquier sugerencia por favor.

#!/bin/bash
grep --color $1 $2
Srujan Kumar Gulla
fuente

Respuestas:

21

Simplemente agregue el siguiente alias al archivo de configuración de su shell, por ejemplo, .bashrco .bash_profile(según el que utilice, consulte aquí ):

alias grep='grep --color=auto'

Simplemente puede usarlo como grep.

Por lo general, no es necesario crear scripts cuando los alias de comando simples hacen lo mismo bien. De hecho, su script ni siquiera funcionaría si quisiera pasar más opciones a grep. En caso de que necesite un pequeño fragmento que pueda manejar argumentos, debe usar funciones .

slhck
fuente
99
O, de manera equivalente, establezca la GREP_OPTIONSvariable de entorno:export GREP_OPTIONS='--color=always'
Jérôme
Esto no agrega la opción de color si usa fgrep o egrep, necesitaría alias separados para esos. Además, @ Jérôme: GREP_OPTIONS está marcado como obsoleto en la página de manual de grep.
Thayne
@Thayne solo para GNU grep y no para otros como FreeBSD grep. Y hasta donde puedo decir, han pasado 4 años desde que se modificó y todavía es compatible. Depreciado no significa eliminado.
cde
Esto es lo que suelo hacer, sin embargo, en algunos casos no funciona bien. Por ejemplo: some_command | xargs grep foono se coloreará porque xargs no usa el alias.
TM.
2
#!/bin/sh
exec grep --color "$@"

Esto ilustra la forma estándar de "envolver" un comando con un script de shell, cuando el comando no funciona de la manera deseada.

Los execevita la creación de un proceso extra (uno para la secuencia de comandos y otra para grep). Podrías dejarlo fuera si quieres.

El "$@"es reemplazado por todos los argumentos del script, sin importar cuántos haya. Conserva correctamente los argumentos con espacios y otros caracteres que son especiales para el shell.

Kenster
fuente
El "exec grep" debería ser "exec / bin / grep"
Berend de Boer
2
@BerenddeBoer No realmente. "ejecutivo grep" funcionaría bien. No hay nada de malo en buscar el camino para grep.
Kenster
-1

intente poner export GREP_COLORS='AUTO'su ~ / .bashrc, para mí funciona.

de man grep

       --color[=WHEN], --colour[=WHEN]
          Surround  the  matched (non-empty) strings, matching lines, context lines, file names, line numbers, byte offsets, and separators (for fields and groups of context lines) with escape sequences
          to display them in color on the terminal.  The colors are defined by the environment variable GREP_COLORS.  The deprecated environment variable GREP_COLOR is still supported, but  its  setting
          does not have priority.  WHEN is never, always, or auto.
mroz
fuente
55
GREP_COLORSEs el conjunto de los colores reales. La configuración de AUTOno debe mostrar ningún color. export GREP_OPTIONS = '- color = auto' debería ser la respuesta.
user137369