 
 
 El grep comando significa "impresión de expresión regular global", y es uno de los comandos más poderosos y comúnmente utilizados en Linux.
 grep busca en uno o más archivos de entrada líneas que coincidan con un patrón dado y escribe cada línea coincidente en la salida estándar. Si no se especifican archivos, grep lee de la entrada estándar, que suele ser la salida de otro comando.
 En este artículo, le mostraremos cómo usar grep comando a través de ejemplos prácticos y explicaciones detalladas de los grep de GNU más comunes opciones.
grep Sintaxis del comando #
 
 La sintaxis para grep El comando es el siguiente:
grep [OPTIONS] PATTERN [FILE...]
Los elementos entre corchetes son opcionales.
- OPTIONS- Cero o más opciones. Grep incluye una serie de opciones que controlan su comportamiento.
- PATTERN- Patrón de búsqueda.
- FILE- Cero o más nombres de archivos de entrada.
Para poder buscar el archivo, el usuario que ejecuta el comando debe tener acceso de lectura al archivo.
Buscar una cadena en archivos #
 El uso más básico de grep El comando es buscar una cadena (texto) en un archivo.
 Por ejemplo, para mostrar todas las líneas que contienen la cadena bash desde el /etc/passwd archivo, ejecutaría el siguiente comando:
grep bash /etc/passwdLa salida debería verse así:
root:x:0:0:root:/root:/bin/bash
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Si la cadena incluye espacios, debe encerrarlo entre comillas simples o dobles:
grep "Gnome Display Manager" /etc/passwdInvertir coincidencia (excluir) #
 Para mostrar las líneas que no coinciden con un patrón, use -v ( o --invert-match ) opción.
 Por ejemplo, para imprimir las líneas que no contienen la cadena nologin usarías:
grep -v nologin /etc/passwdroot:x:0:0:root:/root:/bin/bash
colord:x:124:124::/var/lib/colord:/bin/false
git:x:994:994:git daemon user:/:/usr/bin/git-shell
linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Uso de Grep para filtrar la salida de un comando #
 La salida de un comando se puede filtrar con grep a través de la tubería, y solo las líneas que coincidan con un patrón determinado se imprimirán en el terminal.
 Por ejemplo, para averiguar qué procesos se están ejecutando en su sistema como usuario www-data puedes usar el siguiente ps comando:
ps -ef | grep www-datawww-data 18247 12675  4 16:00 ?        00:00:00 php-fpm: pool www
root     18272 17714  0 16:00 pts/0    00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data
www-data 31147 12770  0 Oct22 ?        00:05:51 nginx: worker process
www-data 31148 12770  0 Oct22 ?        00:00:00 nginx: cache manager process
 También puede encadenar varias tuberías a la orden. Como puede ver en el resultado anterior, también hay una línea que contiene grep proceso. Si no desea que se muestre esa línea, pase la salida a otro grep instancia como se muestra a continuación.
ps -ef | grep www-data | grep -v grepwww-data 18247 12675  4 16:00 ?        00:00:00 php-fpm: pool www
www-data 31147 12770  0 Oct22 ?        00:05:51 nginx: worker process
www-data 31148 12770  0 Oct22 ?        00:00:00 nginx: cache manager process
Búsqueda recursiva #
 Para buscar recursivamente un patrón, invoque grep con el -r opción (o --recursive ). Cuando se usa esta opción grep buscará en todos los archivos del directorio especificado, omitiendo los enlaces simbólicos que se encuentran de forma recursiva.
 Para seguir todos los enlaces simbólicos, en lugar de -r , use el -R opción (o --dereference-recursive ).
 Aquí hay un ejemplo que muestra cómo buscar la cadena linuxize.com en todos los archivos dentro de /etc directorio:
grep -r linuxize.com /etcLa salida incluirá líneas coincidentes con el prefijo de la ruta completa al archivo:
/etc/hosts:127.0.0.1 node2.linuxize.com
/etc/nginx/sites-available/linuxize.com:    server_name linuxize.com   www.linuxize.com;
 Si usa el -R opción, grep seguirá todos los enlaces simbólicos:
grep -R linuxize.com /etc
 Observe la última línea de la salida a continuación. Esa línea no se imprime cuando grep se invoca con -r porque los archivos dentro de los sites-enabled de Nginx directorio son enlaces simbólicos a archivos de configuración dentro de sites-available directorio.
/etc/hosts:127.0.0.1 node2.linuxize.com
/etc/nginx/sites-available/linuxize.com:    server_name linuxize.com   www.linuxize.com;
/etc/nginx/sites-enabled/linuxize.com:    server_name linuxize.com   www.linuxize.com;
Mostrar solo el nombre de archivo #
 Para suprimir el grep predeterminado generar e imprimir solo los nombres de los archivos que contienen el patrón coincidente, utilice -l ( o --files-with-matches ) opción.
 El siguiente comando busca en todos los archivos que terminan en .conf en el directorio de trabajo actual e imprime solo los nombres de los archivos que contienen la cadena linuxize.com :
grep -l linuxize.com *.confLa salida se verá así:
tmux.conf
haproxy.conf
 El -l La opción generalmente se usa en combinación con la opción recursiva -R :
grep -Rl linuxize.com /tmpNúmero de búsqueda que no distingue entre mayúsculas y minúsculas
 Por defecto, grep distingue entre mayúsculas y minúsculas. Esto significa que los caracteres en mayúsculas y minúsculas se tratan como distintos.
 Para ignorar mayúsculas y minúsculas al buscar, invoque grep con el -i opción (o --ignore-case ).
 Por ejemplo, al buscar Zebra sin ninguna opción, el siguiente comando no mostrará ningún resultado, es decir, hay líneas coincidentes:
grep Zebra /usr/share/words
 Pero si realiza una búsqueda que no distingue entre mayúsculas y minúsculas usando -i opción, coincidirá con letras mayúsculas y minúsculas:
grep -i Zebra /usr/share/wordsEspecificar "Zebra" coincidirá con "zebra", "ZEbrA" o cualquier otra combinación de letras mayúsculas y minúsculas para esa cadena.
zebra
zebra's
zebras
Buscar palabras completas #
 Al buscar una cadena, grep mostrará todas las líneas donde la cadena está incrustada en cadenas más grandes.
Por ejemplo, si busca "gnu", todas las líneas en las que "gnu" está incrustado en palabras más grandes, como "cygnus" o "magnum", coincidirán:
grep gnu /usr/share/wordscygnus
gnu
interregnum
lgnu9d
lignum
magnum
magnuson
sphagnum
wingnut
 Para devolver solo aquellas líneas donde la cadena especificada es una palabra completa (entre caracteres que no son palabras), use -w (o --word-regexp ) opción.
a-z , A-Z y 0-9 ) y guiones bajos (_ ). Todos los demás caracteres se consideran caracteres que no son palabras. 
 Si ejecuta el mismo comando que el anterior, incluido el -w opción, el grep el comando devolverá solo aquellas líneas donde gnu se incluye como una palabra separada.
grep -w gnu /usr/share/wordsgnu
Mostrar números de línea #
 El -n ( o --line-number ) la opción le dice a grep para mostrar el número de línea de las líneas que contienen una cadena que coincide con un patrón. Cuando se usa esta opción, grep imprime las coincidencias en la salida estándar con el prefijo del número de línea.
 Por ejemplo, para mostrar las líneas de /etc/services archivo que contiene la cadena bash con el prefijo del número de línea coincidente, puede usar el siguiente comando:
grep -n 10000 /etc/servicesEl siguiente resultado nos muestra que las coincidencias se encuentran en las líneas 10423 y 10424.
10423:ndmp            10000/tcp
10424:ndmp            10000/udp
Recuento de coincidencias #
 Para imprimir un recuento de líneas coincidentes en la salida estándar, use -c ( o --count ) opción.
 En el siguiente ejemplo, estamos contando la cantidad de cuentas que tienen /usr/bin/zsh como un caparazón.
regular expressiongrep -c '/usr/bin/zsh' /etc/passwd
4
Modo silencioso n.º
 El -q (o --quiet ) le dice a grep para funcionar en modo silencioso para no mostrar nada en la salida estándar. Si se encuentra una coincidencia, el comando sale con el estado 0 . Esto es útil cuando se usa grep en scripts de shell en los que desea verificar si un archivo contiene una cadena y realizar una determinada acción según el resultado.
 Aquí hay un ejemplo del uso de grep en modo silencioso como comando de prueba en un if declaración:
if grep -q PATTERN filename
then
    echo pattern found
else
    echo pattern not found
fi
Expresión regular básica #
GNU Grep tiene tres conjuntos de características de expresión regular, básico, extendido y compatible con Perl.
 Por defecto, grep interpreta el patrón como una expresión regular básica donde todos los caracteres, excepto los metacaracteres, son en realidad expresiones regulares que coinciden.
A continuación se muestra una lista de los metacaracteres más utilizados:
-  Usa el ^(símbolo de intercalación) para que coincida con la expresión al comienzo de una línea. En el siguiente ejemplo, la cadenakangaroocoincidirá solo si ocurre al principio de una línea.grep "^kangaroo" file.txt
-  Usa el $(dólar) para que coincida con la expresión al final de una línea. En el siguiente ejemplo, la cadenakangaroocoincidirá solo si ocurre al final de una línea.grep "kangaroo$" file.txt
-  Usa el .(punto) símbolo para que coincida con cualquier carácter individual. Por ejemplo, para hacer coincidir cualquier cosa que comience conkanluego tiene dos caracteres y termina con la cadenaroo, podría usar el siguiente patrón:grep "kan..roo" file.txt
-  Usar [ ](corchetes) para que coincida con cualquier carácter individual encerrado entre corchetes. Por ejemplo, busque las líneas que contienenaccepto “accent, podría usar el siguiente patrón:grep "acce[np]t" file.txt
-  Usa [^ ]para que coincida con cualquier carácter único que no esté entre corchetes. El siguiente patrón coincidirá con cualquier combinación de cadenas que contenganco(any_letter_except_l)a, comococa,cobalty así sucesivamente, pero no coincidirá con las líneas que contienencola,grep "co[^l]a" file.txt
 Para escapar del significado especial del siguiente carácter, use el \ (barra invertida).
Expresiones regulares extendidas #
 Para interpretar el patrón como una expresión regular extendida, use -E (o --extended-regexp ) opción. Las expresiones regulares extendidas incluyen todos los metacaracteres básicos, junto con metacaracteres adicionales para crear patrones de búsqueda más complejos y potentes. A continuación se muestran algunos ejemplos:
-  Haga coincidir y extraiga todas las direcciones de correo electrónico de un archivo determinado: grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
-  Haga coincidir y extraiga todas las direcciones IP válidas de un archivo dado: grep -E -o '(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' file.txt
 El -o La opción se usa para imprimir solo la cadena coincidente.
Buscar múltiples cadenas (patrones) #
 Se pueden unir dos o más patrones de búsqueda usando el operador OR | .
 Por defecto, grep interpreta el patrón como una expresión regular básica donde los metacaracteres como | pierden su significado especial y deben usarse sus versiones con barra invertida.
 En el siguiente ejemplo, estamos buscando todas las apariciones de las palabras fatal , error y critical en el archivo de error de registro de Nginx:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
 Si usa la opción de expresión regular extendida -E , entonces el operador | no se debe escapar, como se muestra a continuación:
grep -E 'fatal|error|critical' /var/log/nginx/error.logImprimir líneas antes de una coincidencia #
 Para imprimir un número específico de líneas antes de hacer coincidir las líneas, use -B (o --before-context ) opción.
Por ejemplo, para mostrar cinco líneas de contexto inicial antes de las líneas coincidentes, usaría el siguiente comando:
grep -B 5 root /etc/passwdImprimir líneas después de una coincidencia #
 Para imprimir un número específico de líneas después de hacer coincidir las líneas, use -A (o --after-context ) opción.
Por ejemplo, para mostrar cinco líneas de contexto final después de las líneas coincidentes, usaría el siguiente comando:
grep -A 5 root /etc/passwdConclusión #
 El grep El comando le permite buscar un patrón dentro de los archivos. Si se encuentra una coincidencia, grep imprime las líneas que contienen el patrón especificado.
Hay mucho más para aprender sobre Grep en la página del Manual del usuario de Grep.
Si tiene alguna pregunta o comentario, no dude en dejar un comentario.