Búsqueda de sitios web

Cómo utilizar el comando fgrep para buscar cadenas de texto en archivos


Breve: En esta guía para principiantes, analizaremos algunos ejemplos prácticos del comando fgrep. Al final de esta guía, los usuarios podrán realizar operaciones de búsqueda de texto de manera eficiente utilizando la interfaz de línea de comandos.

La búsqueda de texto es una de las operaciones que se realizan con más frecuencia. Sin embargo, esta sencilla tarea rápidamente consume mucho tiempo si los usuarios no están familiarizados con las herramientas correctas. En Linux, existen varias utilidades de filtrado de texto como awk, sed, cut, etc.

Sin embargo, en Linux, fgrep es la utilidad preferida para búsquedas de texto simples. En esta guía, analizaremos algunos ejemplos prácticos del comando fgrep que se pueden utilizar en la vida diaria.

El comando fgrep en Linux pertenece a la familia del comando grep. Sin embargo, se utiliza para buscar el patrón de cadena fijo en lugar de expresiones regulares. Por lo tanto, el nombre del comando es fgrep (GREP fijo).

La sintaxis del comando fgrep es similar a la de otros comandos de la familia grep:

fgrep [OPTIONS] PATTERNS [FILES]

Para comenzar, creemos un archivo de texto plano con el siguiente contenido para usar un ejemplo:

cat input.txt

Aquí podemos ver que el archivo de texto está listo con el contenido de muestra. Ahora analicemos algunos ejemplos comunes del comando fgrep en los siguientes ejemplos.

1. ¿En qué se diferencia fgrep de los comandos grep y egrep?

Como sugiere el nombre, el comando fgrep se utiliza para buscar patrones de cadena fijos. Interpreta el patrón como una cadena fija en lugar de una expresión regular. Por lo tanto, realiza la operación de búsqueda de manera eficiente en el tiempo.

Para comprender la diferencia, usemos un carácter de punto (.) con el comando grep.

Esta expresión regular simple coincide con cualquier carácter excepto el final de la línea:

grep ha. input.txt

En el resultado anterior, podemos ver que el carácter punto (.) coincide con el texto har, hat y has . .

Ahora, usemos el mismo patrón con el comando fgrep y observemos el resultado:

fgrep ha. input.txt

En el resultado anterior, podemos ver que el comando no encuentra el patrón dado.

Esto sucede porque el comando fgrep no reconoce expresiones regulares e intenta buscar el patrón inexistente – “ha. ”.

2. Cómo buscar un patrón en un archivo

Comencemos con el ejemplo básico donde buscaremos una cadena profesional en un archivo input.txt:

fgrep professionals input.txt

Como podemos ver, la combinación de patrones se realiza correctamente en dos lugares y está resaltada en color rojo.

3. Cómo configurar el color de salida de Grep para patrones coincidentes

En el ejemplo anterior, vimos que, de forma predeterminada, el patrón coincidente está resaltado en color rojo. Sin embargo, podemos alterar este comportamiento asignando un valor diferente a las variables de entorno GREP_COLOR.

Asignemos el valor 32 a la variable de entorno GREP_COLOR para resaltar el patrón coincidente en color verde:

export GREP_COLOR=32
fgrep professionals input.txt

Ahora, antes de pasar al siguiente ejemplo, desactive la variable de entorno GREP_COLOR para habilitar el comportamiento predeterminado:

unset GREP_COLOR

4. Cómo buscar múltiples patrones en un archivo

A veces, necesitamos realizar una coincidencia de patrones para varias cadenas. En tales casos, podemos proporcionar los patrones del archivo de texto en lugar del argumento de la línea de comando.

Creemos un archivo de texto que contenga múltiples patrones en una línea separada:

cat pattern.txt

professionals
website

Ahora, usemos este archivo con la opción -f para una coincidencia de múltiples patrones:

fgrep -f pattern.txt input.txt

En el resultado anterior, podemos ver que la coincidencia de patrones se realiza correctamente para las cadenas profesionales y sitio web.

5. Cómo limitar el número de coincidencias en un archivo

De forma predeterminada, el comando fgrep continúa realizando la coincidencia de patrones hasta que se procesa todo el archivo.

Sin embargo, a veces necesitamos limitar el número de coincidencias. En tales casos, podemos usar la opción -m con el comando:

fgrep -m 1 professionals input.txt

TecMint was started on 15th August 2012 by technical professionals and all the

En este ejemplo, el comando fgrep detiene el procesamiento del archivo después de hacer coincidir el primer patrón.

6. Cómo imprimir el nombre del archivo al buscar un patrón

A veces, sólo necesitamos encontrar el nombre de los archivos en los que está presente un patrón particular. En tales casos, podemos usar la opción -l del comando fgrep:

fgrep -l professionals input.txt

input.txt

Aquí podemos ver que el comando simplemente imprime el nombre del archivo en lugar de las líneas con los patrones coincidentes.

7. Cómo imprimir el nombre del archivo cuando falla la coincidencia de patrones

En el ejemplo anterior, vimos cómo imprimir el nombre del archivo cuando la coincidencia de patrones se realiza correctamente. Ahora veamos cómo realizar la operación de forma inversa.

Intentemos encontrar el patrón que no existe en el archivo y observemos el resultado:

fgrep -L non-existing-word input.txt

input.txt

En este ejemplo, utilizamos la opción -L del comando que imprime el nombre del archivo cuando la coincidencia del patrón no se realiza correctamente.

8. Cómo suprimir mensajes de error

El manejo de errores juega un papel crucial al escribir scripts de shell. Sin embargo, en algunos escenarios no críticos, podemos ignorar los mensajes de error con seguridad.

En fgrep, podemos usar la opción -s que suprime errores relacionados con archivos inexistentes o ilegibles. Para comprender mejor este comportamiento, intentemos buscar un patrón en el archivo no existente:

fgrep -s professionals non-existing-file.txt
echo $?

2

En el resultado anterior, podemos ver que el comando no muestra ningún error en el flujo de errores estándar. Sin embargo, el error se informa mediante un valor de retorno distinto de cero.

Además de esto, también podemos observar el mismo comportamiento cuando el archivo es ilegible. Entonces, primero, modifique el permiso del archivo usando el comando chmod:

chmod 000 input.txt 
ls -l input.txt

Ahora, intenta buscar el patrón y observa el resultado:

fgrep -s professionals input.txt 
echo $?

9. Cómo excluir líneas parcialmente coincidentes

En los ejemplos anteriores, vimos que el comando fgrep realiza una coincidencia parcial. Sin embargo, en algunos casos, necesitamos realizar la coincidencia exacta para toda la línea. En tales casos, podemos usar la opción -x del comando fgrep.

fgrep -nx "the same site is sometimes hard to find." input.txt

En el resultado anterior, la coincidencia de línea exacta ocurre en la línea número 20.

10. Cómo excluir archivos durante la búsqueda recursiva

A veces, necesitamos omitir ciertos archivos mientras realizamos operaciones de búsqueda. En tales casos, podemos usar la opción --exclude del comando fgrep.

Para entender esto, primero cree un directorio y copie algunos archivos de muestra en él:

mkdir dir-1
cp input.txt dir-1/input.txt
cp input.txt dir-1/input.data
cp input.txt dir-1/input.md 

Ahora, busquemos el patrón en todos los archivos del directorio dir-1 excepto en los archivos “.txt”:

fgrep -r --exclude *.txt professionals dir-1

En el resultado anterior, podemos ver que la coincidencia de patrones se realizó en los archivos con extensiones “.md ” y “.data ”.

11. Cómo excluir varios tipos de archivos durante la búsqueda recursiva

En el ejemplo anterior, vimos cómo excluir archivos con extensiones particulares. Sin embargo, el comando se vuelve largo cuando queremos excluir archivos con múltiples extensiones. En tales casos, podemos proporcionar el patrón de exclusión del archivo en lugar del argumento de la línea de comando:

Entonces, creemos un archivo de texto que contenga múltiples patrones de exclusión en una línea separada:

cat skip-pattern.txt 
*.txt
*.data

Ahora, usemos este archivo con la opción --exclude-from:

fgrep -r --exclude-from skip-pattern.txt professionals dir-1

Aquí, podemos ver que la coincidencia de patrones se realizó en los archivos con extensiones “.md ” únicamente.

12. Cómo incluir archivos durante la búsqueda recursiva

En los ejemplos anteriores, vimos cómo excluir archivos mientras realizamos operaciones de búsqueda de forma recursiva. Ahora veamos cómo realizar la operación de forma inversa.

Usemos la opción --include del comando fgrep para realizar una búsqueda en los archivos con la extensión “*.txt ”:

fgrep -r --include "*.txt" professionals dir-1

En el resultado anterior, podemos ver que la coincidencia de patrones se omite para los archivos con extensiones “*.md ” y “*.data ”.

En este artículo, analizamos algunos ejemplos útiles del comando fgrep. Los principiantes pueden utilizar estos ejemplos en la vida diaria para mejorar la productividad mientras trabajan con Linux.

¿Conoce algún otro mejor ejemplo del comando fgrep en Linux? Háganos saber su opinión en los comentarios a continuación.