grep

30 ejemplos de Grep

30 ejemplos de Grep
Puede encontrar grep presente en el interior del cerebro animal de Unix y sistemas operativos similares a Unix. Es un programa básico utilizado para la coincidencia de patrones y fue escrito en los años 70 junto con el resto de la herramienta UNIX que conocemos y amamos (u odiamos).

Si bien aprender sobre lenguajes formales y expresiones regulares es un tema interesante. Aprender grep tiene mucho más que expresiones regulares. Para comenzar con él y ver la belleza y la elegancia de grep, primero debe ver algunos ejemplos del mundo real.

Ejemplos que son útiles y te hacen la vida un poco más fácil. Aquí hay 30 casos de uso y opciones comunes de grep.

1. ps aux | grep

El ps aux lista todos los procesos y sus pids asociados. Pero a menudo esta lista es demasiado larga para que un humano la inspeccione. Al canalizar la salida a un comando grep, puede enumerar los procesos que se ejecutan con una aplicación muy específica en mente. Por ejemplo el podría ser sshd o nginx o httpd.

# ps aux | grep sshd
raíz 400 0.0 0.2 69944 5624 ?       Ss 17:47 0:00 / usr / sbin / sshd -D
raíz 1076 0.2 0.3 95204 6816 ?       SS 18:29 0:00 sshd: root @ pts / 0
raíz 1093 0.0 0.0 12784932 puntos / 0 S + 18:29 0:00 grep sshd

2. Grepping sus direcciones IP

En la mayoría de los sistemas operativos, puede enumerar todas sus interfaces de red y la IP asignada a esa interfaz mediante el comando ifconfig o ip addr. Ambos comandos generarán mucha información adicional. Pero si desea imprimir solo la dirección IP (por ejemplo, para los scripts de shell), puede usar el siguiente comando:

$ ip addr | grep inet | awk 'imprimir $ 2; '
$ ip addr | grep -w inet | awk 'imprimir $ 2; '#Para líneas con solo inet no inet6 (IPv6)

El comando ip addr obtiene todos los detalles (incluidas las direcciones IP), luego se canaliza al segundo comando grep inet que genera solo las líneas con inet en ellas. Esto luego se canaliza a awk imprime la declaración que imprime la segunda palabra en cada línea (para decirlo simplemente).

PAG.S: También puede hacer esto sin el grep si conoce bien awk.

3. Mirando los intentos fallidos de SSH

Si tiene un servidor orientado a Internet, con una IP pública, será bombardeado constantemente con intentos de SSH y si permite que los usuarios tengan acceso SSH basado en contraseña (una política que no recomendaría), puede ver todos los intentos fallidos utilizando el siguiente comando grep:

# cat / var / log / auth.registro | grep "Fallo"
Muestra hacia fuera puesto
5 de diciembre 16:20:03 debian sshd [509]: contraseña fallida para root desde 192.168.0.100 puerto 52374 ssh2
5 de diciembre 16:20:07 debian sshd [509]: contraseña fallida para root desde 192.168.0.100 puerto 52374 ssh2
5 de diciembre 16:20:11 debian sshd [509]: contraseña fallida para root desde 192.168.0.100 puerto 52374 ssh2

4. Conectando Grep a Uniq

A veces, grep generará mucha información. En el ejemplo anterior, es posible que una sola IP haya intentado ingresar a su sistema. En la mayoría de los casos, solo hay un puñado de IP ofensivas que necesita identificar de forma única y poner en lista negra.

# cat / var / log / auth.registro | grep "Fallo" | uniq -f 3

Se supone que el comando uniq imprime solo las líneas únicas. El uniq -f 3 omite los primeros tres campos (para pasar por alto las marcas de tiempo que nunca se repiten) y luego comienza a buscar líneas únicas.

5. Grepping para mensajes de error

El uso de Grep para los registros de acceso y error no se limita solo a SSH. Los servidores web (como Nginx) registran errores y acceden a los registros de forma bastante meticulosa. Si configura scripts de monitoreo que le envían alertas cuando grep "404" devuelve un nuevo valor. Eso puede ser muy útil.

# grep -w "404" / var / www / nginx / access.Iniciar sesión
192.168.0.100 - - [06 / Dec / 2018: 02: 20: 29 +0530] "GET / favicon.ico HTTP / 1.1 "404 200
"http: // 192.168.0.102 / "" Mozilla / 5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 70.0.3538.110 Safari / 537.36 "
192.168.0.101 - - [06 / Dec / 2018: 02: 45: 16 +0530] "GET / favicon.ico HTTP / 1.1 "404 143
"http: // 192.168.0.102 / "" Mozilla / 5.0 (iPad; CPU OS 12_1 como Mac OS X)
AppleWebKit / 605.1.15 (KHTML, como Gecko) Versión / 12.0 móvil / 15E148 Safari / 604.1 "

La expresión regular puede no ser "404", sino algún otro filtrado de expresiones regulares solo para clientes móviles o solo dispositivos Apple que ven una página web. Esto le permite tener una visión más profunda del rendimiento de su aplicación.

6. Listado de paquetes

Para los sistemas basados ​​en Debian, dpkg -l enumera todos los paquetes instalados en su sistema. Puede canalizar eso en un comando grep para buscar paquetes que pertenezcan a una aplicación específica. Por ejemplo:

# dpkg -l | grep "vim"

7. grep -v fileNames

Para enumerar todas las líneas que no contener un patrón dado, use la bandera -v. Es básicamente lo opuesto a un comando grep normal.

8. grep -l

Enumera todos los archivos que contienen al menos una aparición del patrón proporcionado. Esto es útil cuando busca un patrón dentro de un directorio con varios archivos. Solo imprime el nombre del archivo y no la línea específica con el patrón.

9. Opción de una sola palabra -w

$ grep -w fileNames

La bandera -w le dice a grep que busque el patrón dado como una palabra completa y no solo como una subcadena de una línea. Por ejemplo, antes hicimos grep para la dirección IP y el patrón inet imprimió las líneas con ambos inet y inet6 enumerar direcciones IPv4 e IPv6. Pero si usamos -w marca solo las líneas con inet como una palabra precedida y seguida de espacios en blanco es una coincidencia válida.

10. Expresión regular extendida

A menudo encontrará que las expresiones regulares nativas de Grep son un poco limitantes. En la mayoría de los scripts e instrucciones, encontrará el uso de la bandera -E y esto le permitirá ingresar un patrón en lo que se llama el modo extendido.

Aquí están los comandos grep y grep -E para buscar palabras Superman y Spiderman.

Texto de $ grep "\ (Super | Spider \) man"
Texto de $ grep -E "(Super | Spider) man"

Como puede ver, la versión extendida es mucho más fácil de leer.

11. Grep para sus contenedores

Si tiene un gran grupo de contenedores ejecutándose en su host, puede agruparlos por nombre de imagen, estado, puertos que están exponiendo y muchos otros atributos. Por ejemplo,

$ docker ps | grep [imageName]

12. Grep por tus vainas

Mientras estamos en el tema de los contenedores. Kubernetes a menudo tiende a lanzar varios pods en una implementación determinada. Si bien cada pod tiene un nombre único, en un espacio de nombres determinado, comienzan con el nombre de implementación, generalmente. Podemos hacer grep de eso y enumerar todos los pods asociados con una implementación determinada.

$ kubectl obtener vainas | grep

13. Grep para Big Data

A menudo, el análisis denominado "Big Data" implica una búsqueda, clasificación y recuento simples de patrones en un conjunto de datos determinado. Las utilidades de UNIX de bajo nivel como grep, uniq, wc son especialmente buenas en esto. Esto entrada en el blog muestra un buen ejemplo de una tarea realizada en cuestión de segundos usando grep y otras utilidades de Unix, mientras que Hadoop tomó casi media hora.

Por ejemplo, este conjunto de datos es más de 1.7GB de tamaño. Contiene información sobre una multitud de partidos de ajedrez, incluidos los movimientos realizados, quién ganó, etc. Solo nos interesan los resultados, por lo que ejecutamos el siguiente comando:

$ grep "Resultado" millón de base-2.22.pgn | ordenar | uniq -c
221 [Resultado "*"]
653728 [Resultado "0-1"]
852305 [Resultado "1-0"]
690934 [Resultado "1 / 2-1 / 2"]

Esto tomó alrededor de 15 segundos en un procesador de 2 núcleos / 4 hilos de 4 años. Entonces, la próxima vez que resuelva un problema de "macrodatos". Piense si puede usar grep en su lugar.

14. grep -color = auto

Esta opción permite que grep resalte el patrón dentro de la línea donde se encontró.

15. grep -i

La coincidencia de patrones Grep es inherentemente sensible a mayúsculas y minúsculas. Pero si eso no le importa, entonces el uso de la bandera -i hará que grep no distinga entre mayúsculas y minúsculas.

dieciséis. grep -n

La bandera -n mostrará los números de línea para que no tenga que preocuparse por encontrar la misma línea más adelante.

17. git grep

Git, el sistema de control de versiones, tiene un comando grep incorporado que funciona de manera muy similar a su grep habitual. Pero se puede usar para buscar patrones en cualquier árbol comprometido usando la CLI nativa de git, en lugar de tediosas tuberías. Por ejemplo, si está en la rama maestra de su repositorio, puede hacer grep a través del repositorio usando:

(maestro) $ git grep

18. grep -o

La bandera -o es realmente útil cuando intentas depurar una expresión regular. Imprimirá solo la parte correspondiente de la línea, en lugar de la línea completa. Entonces, en caso de que obtenga demasiadas líneas no deseadas para un patrón proporcionado, y no pueda entender por qué sucede eso. Puede usar el indicador -o para imprimir la subcadena ofensiva y la razón sobre su expresión regular al revés desde allí.

19. grep -x

La bandera -x imprimiría una línea, si y solo si, toda la línea coincide con la expresión regular proporcionada. Esto es algo similar al indicador -w que imprime una línea si y solo una palabra completa coincide con la expresión regular proporcionada.

20. grep -T

Al tratar con registros y salidas de scripts de shell, es más probable que encuentre pestañas rígidas para diferenciar entre diferentes columnas de salida. La bandera -T alineará cuidadosamente estas pestañas para que las columnas estén ordenadas, haciendo que la salida sea legible para humanos.

21. grep -q

Esto suprime la salida y ejecuta silenciosamente el comando grep. Muy útil al reemplazar texto o ejecutar grep en un script demonio.

22. grep -P

Las personas que están acostumbradas a la sintaxis de expresiones regulares de Perl pueden usar la marca -P para usar exactamente eso. No es necesario que aprenda las expresiones regulares básicas, que grep usa de forma predeterminada.

23. grep -D [ACCIÓN]

En Unix, casi todo se puede tratar como un archivo. En consecuencia, cualquier dispositivo, un socket o un flujo de datos FIFO se puede alimentar a grep. Puede usar la marca -D seguida de una ACCIÓN (la acción predeterminada es LEER). Algunas otras opciones son SKIP para omitir silenciosamente dispositivos específicos y RECURSE para pasar de forma recursiva a través de directorios y enlaces simbólicos.

24. Repetición

Si está buscando un patrón dado que es una repetición de un patrón conocido más simple, use llaves para indicar el número de repeticiones

$ grep -E "[0-9] 10"

Esto imprime líneas que contienen cadenas de 10 o más dígitos de longitud.

25. Taquigrafía de repetición

Algunos caracteres especiales están reservados para un tipo específico de repetición de patrones. Puede usar estos en lugar de llaves, si se ajustan a sus necesidades.

? : El patrón que precede al signo de interrogación debe coincidir con cero o una vez.

*: El patrón que precede a la estrella debe coincidir cero o más veces.

+ : El patrón que precede al signo más debe coincidir una o más veces.

25. Desplazamientos de bytes

Si desea saber ver el desplazamiento de bytes de las líneas donde se encuentra la expresión coincidente, puede usar el indicador -b para imprimir los desplazamientos también. Para imprimir el desplazamiento de solo la parte coincidente de una línea, puede usar el indicador -b con el indicador -o.

$ grep -b -o [Nombre del archivo]

Desplazamiento simplemente significa, después de cuántos bytes desde el principio del archivo comienza la cadena coincidente.

26. egrep, fgrep y rgerp

A menudo verá la invocación de egrep, para usar la sintaxis de expresión regular extendida que discutimos anteriormente. Sin embargo, esta es una sintaxis obsoleta y se recomienda que evite usar esta. Utilice grep -E en su lugar. Del mismo modo, use grep -F, en lugar de fgrep y grep -r en lugar de rgrep.

27. grep -z

A veces, la entrada a grep no son líneas que terminan con un carácter de nueva línea. Por ejemplo, si está procesando una lista de nombres de archivos, es posible que provengan de diferentes fuentes. La bandera -z le dice a grep que trate el carácter NULL como el final de la línea. Esto le permite tratar la transmisión entrante como cualquier archivo de texto normal.

28. grep -a [Nombre del archivo]

La bandera -a le dice a grep que trate el archivo proporcionado como si fuera texto normal. El archivo podría ser un binario, pero grep tratará el contenido dentro, como si fuera texto.

29. grep -U [Nombre del archivo]

La bandera -U le dice a grep que trate los archivos proporcionados como si fueran archivos binarios y no texto. Por defecto, grep adivina el tipo de archivo mirando los primeros bytes. El uso de esta bandera anula las conjeturas.

30. grep -m NUM

Con archivos grandes, la búsqueda de una expresión puede llevar una eternidad. Sin embargo, si desea verificar solo los primeros NUM números de coincidencias, puede usar la marca -m para lograr esto. Es más rápido y la salida a menudo también es manejable.

Conclusión

Gran parte del trabajo diario de un administrador de sistemas implica examinar grandes franjas de texto. Estos pueden ser registros de seguridad, registros de su servidor web o de correo, actividad del usuario o incluso texto grande de páginas de manual. Grep le brinda un poco de flexibilidad adicional cuando se trata de estos casos de uso.

Con suerte, los pocos ejemplos y casos de uso anteriores le han ayudado a comprender mejor este fósil viviente de un software.

Cómo descargar y jugar Sid Meier's Civilization VI en Linux
Introducción al juego Civilization 6 es una versión moderna del concepto clásico introducido en la serie de juegos Age of Empires. La idea era bastant...
Cómo instalar y jugar a Doom en Linux
Introducción a Doom La serie Doom se originó en los años 90 después del lanzamiento del Doom original. Fue un éxito instantáneo y, desde ese momento e...
Vulkan para usuarios de Linux
Con cada nueva generación de tarjetas gráficas, vemos que los desarrolladores de juegos superan los límites de la fidelidad gráfica y se acercan un pa...