Respuestas:
alias cgrep='grep -nR --color'
Uso:
$ cgrep somestring /path/to/dir/or/file/with*/possible/*wild.card
También uno de mis favoritos:
$ pgrep some-hanging-process
enumerará todos los pids de procesos que coinciden con el nombre de algún proceso que puede usar en la siguiente situación:
$ kill $(pgrep some-hanging-process)
grep
, grep -r
generalmente se debe preferir a grep -R
las anteriores, ya que la primera no atraviesa enlaces simbólicos.
He descubierto que la mejor manera de pimp grep es usar ack , que es esencialmente grep recursivo con una lista inteligente de ignorar (por ejemplo, no busca directorios .svn, ignora archivos de copia de seguridad, etc.), resaltando los resultados en color y perl regexps. Es lo que quieres que haga grep el 98,6% del tiempo.
Configuré esto en mi .bashrc, en lugar de redefinir grep usando un alias:
export GREP_OPTIONS="--color=auto"
Para mí, esto funciona en Linux, MacOSX y FreeBSD.
GREP_OPTIONS
debe considerarse dañino Recomiendo usar alias
en su lugar. Ver aquí: bugs.launchpad.net/ubuntu/+bug/67141
Recomiendo evitar la variable de entorno GREP_OPTIONS, afectará cada invocación de grep, incluso aquellas integradas en otras herramientas. Si esas herramientas esperan que grep se comporte de una manera, y usted cambia ese comportamiento, las romperá y las romperá.
En su lugar, puede crear un alias, que funciona bien. Esto solo afectará las llamadas a grep desde su shell interactivo (es decir, que escriba usted mismo).
La última opción, que me gusta más que nada, es crear un script de envoltura que invoque grep. Prefiero esto sobre un alias, porque puedo invocar este contenedor desde otros programas. Por ejemplo, en vim configurando vimgrep, de modo que mis búsquedas desde vim se comporten de manera idéntica a las búsquedas en la línea de comandos.
$ cat `which grp`
#!/usr/bin/env bash
grep -rI --color --exclude-dir=\.bzr --exclude-dir=\.git --exclude-dir=\.hg --exclude-dir=\.svn --exclude-dir=build --exclude-dir=dist --exclude=tags $*
Invoque esto usando:
$ grp pattern dir
p.ej
$ grp pattern .
buscará instancias de 'patrón' en todos los archivos de texto en el directorio actual y subdirecciones.
Tenga en cuenta que llamo a mi script 'grp', en lugar de sombrear 'grep', para que siempre esté al tanto de si invoco grep con mis valores predeterminados personalizados o no.
Por defecto incluyo:
-r : search subdirs recursive
-I : skip binary files
--color : highlight matches in color
--exclude-dir : skip specified directories and their subdirs
--exclude : skip specified files
Creo que todos querrían omitir los directorios de control de código fuente: .hg .git .bzr .svn
Omitir 'build' y 'dist' son Python-isms, y probablemente no se aplican a la mayoría de las personas. Sin duda, desarrollará sus propias idiosincrasias mientras trabaja.
'tags' es el resultado de ctags, que uso para 'ir a la definición de funciones' y similares en herramientas como vim. Como tal, contiene al menos una copia de cada palabra y símbolo de mi código fuente, por lo que vale la pena saltarse los resultados de búsqueda.
"$ *" al final es la sintaxis de bash para "y todos los demás parámetros de la línea de comandos", por lo que puede pasar el patrón y el directorio para buscar normalmente, y anular cualquier otra marca de línea de comando que desee .
La --color
opción ya se ha mencionado varias veces, pero me gustaría agregar que es posible configurar el color en el que se resaltarán las coincidencias utilizando una variable de entorno
export GREP_COLOR="1;33"
El color debe codificarse utilizando códigos de color ANSI, como referencia
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
GREP_COLOR
es obsoleto. Usar en su GREP_COLORS
lugar.
Como no vi ningún ejemplo de configuración de colores, aquí hay una configuración simple para GNU grep:
# turn on colors, natch.
export GREP_OPTIONS="--color=auto"
if [[ $(echotc Co) -ge 256 ]]; then
# 256 color terminals
export GREP_COLORS="mt=38;5;118:sl=:cx=:fn=38;5;18:ln=1;30:bn=37:se=30"
else
# everybody else
export GREP_COLORS="mt=31:sl=:cx=:fn=34:ln=1;30:bn=30:se=30"
fi
Ten cuidado con GREP_OPTIONS
; no lo use para otra cosa que no sea cosas --color=auto
o dañará cualquier script que use grep en su sistema.