Grep o Impresión de expresión regular global se utiliza para buscar texto o patrones en un sistema Linux. Puede buscar en archivos, directorios e incluso resultados de otros comandos.
Las expresiones regulares son patrones que pueden hacer coincidir el texto según las necesidades del usuario. Estas son como reglas para la coincidencia de patrones.
Grep se usa a menudo junto con expresiones regulares para buscar patrones en el texto. Veamos algunos ejemplos prácticos de expresiones regulares con grep.
1. Coincidencia de una palabra independientemente de su caso
A veces, en un texto, la misma palabra se puede escribir de diferentes maneras. Este es el caso más común con los nombres propios. En lugar de comenzar con una letra mayúscula, a veces se escriben en minúsculas.
$ grep "[Jj]ayant"
Se han hecho coincidir ambas versiones de la palabra, independientemente de su caso.
Otro caso interesante se puede observar con la palabra ‘IoT’. Una palabra como esta puede aparecer varias veces en el texto con diferentes variaciones. para hacer coincidir todas las palabras independientemente del uso del caso:
$ grep "[iI][oO][tT]"
2. Número de teléfono móvil coincidente usando expresiones regulares con grep
Las expresiones regulares se pueden utilizar para extraer el número de móvil de un texto.
El formato del número de móvil tiene que ser conocido de antemano. Por ejemplo, una expresión regular diseñada para hacer coincidir números de teléfono móvil no funcionará para números de teléfono de casa.
En este ejemplo, se comparará el número de móvil que tiene el siguiente formato:91-1234567890 (es decir, TwoDigit-TenDigit).
$ grep "[[:digit:]]\{2\}[ -]\?[[:digit:]]\{10\}"
Como es evidente, solo coincide el número de móvil en el formato mencionado anteriormente.
3. Hacer coincidir la dirección de correo electrónico
Extraer la dirección de correo electrónico de un texto es muy útil y se puede lograr usando grep.
Una dirección de correo electrónico tiene un formato particular. La parte anterior a la '@' es el nombre de usuario que identifica el buzón. Luego está un dominio como gmail.com o yahoo.in.
La expresión regular se puede diseñar teniendo en cuenta estas cosas.
$ grep -E "[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}"
- [A-Za-z0-9._%+-]+ captura el nombre de usuario antes de '@'
- [A-Za-z0-9.-]+ captura el nombre del dominio sin la parte '.com'
- .[A-Za-z]{2,6} captura el '.com' o '.in', etc.
4. Comprobador de URL
Una URL tiene un formato particular de representación. Se puede crear una expresión regular que verifique si una URL está en la forma adecuada o no.
Una URL debe comenzar con http/https/ftp seguido de '://'. Luego está el nombre de dominio que puede terminar en '.com', '.in', '.org', etc.
$ grep -E "^(http|https|ftp):[\/]{2}([a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,4})"
-E utilizado en este ejemplo y en el anterior significa grep extendido que usa el conjunto de expresiones regulares extendidas en lugar del conjunto de expresiones regulares básicas. Esto significa que no es necesario escapar ciertos caracteres especiales. Hace que el proceso de escribir una expresión regular compleja sea menos tedioso. Lea más sobre esto aquí.
5. Encontrar archivos con una extensión particular
El comando ls muestra todos los archivos en el directorio actual.
ejecutar ls -l brinda información adicional sobre los archivos. Grep se puede usar junto con el comando ls -l para hacer coincidir el patrón en su salida.
Para capturar archivos que se guardan con la extensión '.txt' use:
$ ls -l | grep '.txt$'
6. Buscar contenido entre paréntesis
A menudo, los archivos de texto tienen contenido entre paréntesis. Podemos extraerlos usando expresiones regulares con grep.
$ grep "([A-Za-z ]*)"
La expresión regular elegirá el texto que está entre paréntesis. También se puede especificar la longitud del contenido entre paréntesis.
Por ejemplo, para hacer coincidir paréntesis con solo 10 caracteres, use:
$ grep "([A-Za-z ]{10})"
7. Coincidencia de líneas que comienzan con una palabra en particular
Podemos usar expresiones regulares para buscar líneas que comiencen con una palabra en particular.
Para buscar líneas que comiencen con la palabra Manzanas, use:
grep '^Apples' input.txt
Del mismo modo, también se pueden encontrar líneas que comiencen con cualquier otra palabra.
Podemos hacer coincidir las líneas que terminan con una palabra específica usando las siguientes expresiones regulares.
$ grep 'apples.$' input.txt
8. Coincidencia de varias palabras a la vez
Hagamos coincidir varias palabras con expresiones regulares como se muestra a continuación:
$ grep 'Apples\|Orange' input.txt
Este comando funciona con una línea OR entre las dos palabras. Coincide con las líneas que contienen cualquiera de las dos palabras.
Para hacer un AND entre las dos palabras usa:
$ grep 'Apple' input.txt | grep 'Orange
9. Emparejar la misma palabra en diferentes formas
A veces una palabra puede ocurrir en diferentes formas. Pueden diferir según el tiempo verbal en el que se usan.
Pelado y Peeling son ejemplos de ello. En ambas palabras, la raíz de la palabra es 'peel'
Podemos usar expresiones regulares para hacer coincidir todas las formas de una palabra.
En nuestro texto, hemos deletreado pelado y pelado como pelado y pelado respectivamente.
También podemos traducir del inglés estadounidense al inglés británico de manera similar. Por ejemplo, la palabra color se convierte en color.
$ grep 'peal\([a-z]*\)\(\.*[[:space:]]\)' input.txt
10. Búsqueda de usuarios en el archivo /etc/passwd
grep se puede usar para obtener usuarios del archivo /etc/passwd/. El archivo /etc/passwd mantiene la lista de usuarios en el sistema junto con información adicional.
$ grep "Adam" /etc/passwd
El comando usa grep en un archivo del sistema. Cuando se encuentra la palabra "Adam", podemos ver la línea como salida. Podemos realizar la misma búsqueda para cualquier otro elemento del archivo.
Conclusión
Regex junto con el comando grep puede ser muy poderoso. Regex se estudia como un campo separado en informática y se puede usar para hacer coincidir patrones altamente complejos. Obtén más información sobre las expresiones regulares aquí.