grep

Encontrar cadenas en archivos de texto usando grep con expresión regular

Encontrar cadenas en archivos de texto usando grep con expresión regular
grep es una de las herramientas más populares para buscar y encontrar cadenas en un archivo de texto. El nombre 'grep' deriva de un comando en la ahora obsoleta herramienta de edición de línea de Unix ed: el comando ed para buscar globalmente a través de un archivo para un expresión regular y entonces impresión esas lineas eran g / re / p, ¿Dónde estaba la expresión regular que usarías?. Finalmente, el comando grep se escribió para realizar esta búsqueda en un archivo cuando no se usa ed.

En este artículo, le mostramos cómo ejecutar una búsqueda avanzada de cadenas utilizando Grep con expresión regular al brindarle 10 ejemplos prácticos sobre sus implementaciones. Muchos ejemplos discutidos en este artículo tienen implicaciones prácticas, lo que significa que puede usarlos en su programación diaria de Linux. Los siguientes ejemplos describen algunos ejemplos de expresiones regulares para patrones comúnmente buscados.

Ejemplo 1: encontrar un solo fletador en un archivo de texto

Para generar líneas en el archivo 'libro' que contienen un carácter '$', escriba:

$ grep '\ $' libro

Ejemplo 2: buscar una sola cadena en un archivo de texto

Para generar líneas en el archivo 'libro' que contiene la cadena '$ 14.99 ', escriba:

$ grep '\ $ 14 \.99 'libro

Ej 3: encontrar un único fletador especial en un archivo de texto

Para generar líneas en el archivo 'libro' que contienen un carácter '\', escriba:

$ grep '\\' libro

Ej 4: Coincidencia de líneas que comienzan con cierto texto

Use 'ˆ' en una expresión regular para indicar el comienzo de una línea.

Para generar todas las líneas en '/ usr / dict / words' que comienzan con 'pro', escriba:

$ grep 'ˆpro' / usr / dict / palabras

Para generar todas las líneas en el archivo 'libro' que comienzan con el texto 'al principio', independientemente del caso, escriba:

$ grep -i libro 'ˆin the begin'

NOTA: Estas expresiones regulares se citaron con 'caracteres; esto se debe a que algunas conchas tratan el carácter 'ˆ' como un "metacarácter" especial

Además de las búsquedas de palabras y frases, puede usar grep para buscar patrones de texto complejos llamados expresiones regulares. Una expresión regular, o "regexp", es una cadena de texto de caracteres especiales que especifica un colocar de patrones para combinar.

Técnicamente hablando, los patrones de palabras o frases son expresiones regulares, solo muy simples. En una expresión regular, la mayoría de los caracteres, incluidas letras y números, se representan a sí mismos. Por ejemplo, el patrón de expresiones regulares 1 coincide con la cadena '1' y el patrón chico coincide con la cadena 'chico'.

Hay una serie de caracteres reservados llamados metacaracteres que no se representan a sí mismos en una expresión regular, pero tienen un significado especial que se utiliza para construir patrones complejos. Estos metacaracteres son los siguientes: ., *, [, ], ˆ, $ y \. Es bueno notar que tales metacaracteres son comunes entre casi todas las distribuciones de Linux comunes y especiales. Aquí hay un buen artículo que cubre los significados especiales de los metacaracteres y da ejemplos de su uso.

Ej 5: Coincidencia de líneas que terminan con cierto texto

Use '$' como el último carácter del texto entre comillas para que coincida con ese texto solo al final de una línea. Para generar líneas en el archivo 'en curso' que terminan con un signo de exclamación, escriba:

$ grep '!$ 'yendo

Ej 6: Coincidencia de líneas de cierta longitud

Para hacer coincidir líneas de una longitud particular, use ese número de '.'caracteres entre' ˆ 'y' $ '- por ejemplo, para hacer coincidir todas las líneas que tienen dos caracteres (o columnas) de ancho, use' ˆ… $ 'como la expresión regular para buscar.

Para generar todas las líneas en '/ usr / dict / words' que tengan exactamente tres caracteres de ancho, escriba:

$ grep 'ˆ… $' / usr / dict / words

Para líneas más largas, es más útil usar una construcción diferente: 'ˆ.\ número \ $ ', donde número es el número de líneas que deben coincidir. Use ',' para especificar un rango de números.

Para generar todas las líneas en '/ usr / dict / words' que tengan exactamente doce caracteres de ancho, escriba:

$ grep 'ˆ.\ 12 \ $ '/ usr / dict / palabras

Para generar todas las líneas en '/ usr / dict / words' que tengan veintidós o más caracteres de ancho, escriba:

$ grep 'ˆ.\ 22, \ $ '/ usr / dict / words

Ej 7: Coincidencia de líneas que contienen algunas de algunas expresiones regulares

Para hacer coincidir líneas que contienen cualquiera de una serie de expresiones regulares, especifique cada una de las expresiones regulares para buscar entre operadores de alternancia ('\ |') como la expresión regular para buscar. Se generarán líneas que contengan cualquiera de las expresiones regulares dadas.

Para generar todas las líneas en 'playboy' que contienen los patrones 'el libro' o 'pastel', escriba:

$ grep 'el libro \ | pastel' playboy

Ej 8: Coincidencia de líneas que contienen todas algunas expresiones regulares

Para generar líneas que coincidan todas de una serie de expresiones regulares, use grep para generar líneas que contengan la primera expresión regular que desea hacer coincidir, y canalice la salida a un grep con la segunda expresión regular como argumento. Continúe agregando tuberías a las búsquedas grep para todas las expresiones regulares que desea buscar.

Para generar todas las líneas en 'lista de reproducción' que contiene ambos patrones 'la orilla' y 'cielo', independientemente del caso, escriba:

$ grep -i 'la orilla' lista de reproducción | grep -i cielo

Ej 9: Coincidencia de líneas que solo contienen ciertos caracteres

Para hacer coincidir líneas que solo contienen ciertos caracteres, use la expresión regular 'ˆ [caracteres] * $', donde los caracteres son los que deben coincidir.  Para generar líneas en '/ usr / dict / words' que solo contienen vocales, escriba:

$ grep -i 'ˆ [aeiou] * $' / usr / dict / palabras

La opción '-i' coincide con los caracteres independientemente de las mayúsculas y minúsculas; entonces, en este ejemplo, todos los caracteres de las vocales coinciden independientemente del caso.

Ej 10: Encontrar frases independientemente del espacio

Una forma de buscar una frase que pueda aparecer con espacios adicionales entre palabras, o en una línea o salto de página, es eliminar todos los avances de línea y espacios adicionales de la entrada, y luego grep que. Para hacer esto, canalice la entrada a tr con "\ r \ n: \> \ | -" como argumento a la opción '-d' (eliminando todos los saltos de línea de la entrada); canalice eso al filtro fmt con la opción '-u' (dando salida al texto con espaciado uniforme); y canalice eso para grep con el patrón para buscar.

Para buscar en los saltos de línea la cadena "al mismo tiempo que" en el archivo "documentos", escriba:

$ cat docs | tr -d '\ r \ n: \> \ |
-'| fmt -u | grep 'al mismo tiempo que'

Resumen

En este artículo, revisamos 10 ejemplos prácticos del uso del comando Grep Linux para buscar y encontrar cadenas en un archivo de texto. En el camino, aprendimos cómo usar expresiones regulares junto con Grep para realizar búsquedas complejas en archivos de texto. A estas alturas ya tiene una mejor idea de lo poderosas que son las funciones de búsqueda de Linux.

Aquí hay recursos adicionales para aquellos interesados ​​en aprender más sobre la programación de Linux:

Recursos para administradores de sistemas

Recursos para programadores del kernel de Linux

Diccionario del sistema de archivos de Linux

Revisión completa de cómo funciona el sistema de directorios y archivos de Linux

Cómo mostrar la superposición de OSD en aplicaciones y juegos de Linux en pantalla completa
Jugar juegos en pantalla completa o usar aplicaciones en modo de pantalla completa sin distracciones puede aislarlo de la información relevante del si...
Las 5 mejores cartas de captura de juegos
Todos hemos visto y amado la transmisión de juegos en YouTube. PewDiePie, Jakesepticye y Markiplier son solo algunos de los mejores jugadores que han ...
Cómo desarrollar un juego en Linux
Hace una década, no muchos usuarios de Linux predecían que su sistema operativo favorito algún día sería una plataforma de juegos popular para videoju...