Cómo encontrar una palabra específica en un archivo en Linux

Grep Folders

Por defecto, la mayoría de las herramientas de búsqueda miran los nombres de archivo, no el contenido del archivo. Sin embargo, el programa de búsqueda GNU más famoso, grep, buscará dentro de los archivos con las banderas correctas. Aquí te mostramos cómo puedes encontrar palabra(s) específicas en un archivo en Linux.

Tabla de Contenidos

  • Usando grep para encontrar una palabra específica en un archivo
  • Usando find para encontrar una palabra específica en un archivo
  • Usando ack para encontrar una palabra específica en un archivo
  • ¿Quieres una GUI? Usa Catfish
  • Preguntas Frecuentes

También lee: Cómo encontrar archivos grandes en Linux

Usando grep para encontrar una palabra específica en un archivo

Por defecto, grep busca dentro del contenido de los archivos así como en sus nombres. Está incluido en la mayoría de los sistemas Linux y es generalmente idéntico entre distribuciones. Los programadores que buscan dentro del contenido de sus proyectos pueden preferir ejecutar un comando diferente, como ack.

Dependiendo de cómo esté codificado el archivo, grep puede no siempre ser capaz de mirar dentro. Pero para la mayoría de los formatos basados en texto, grep puede escanear el texto del archivo en busca del patrón especificado.

grep -rw '/path/to/search/' -e 'pattern'
  • La bandera -r establece grep en modo recursivo, navegando por todos los directorios contenidos en el directorio especificado.
  • La bandera -w busca coincidencias de palabras completas. Esto significa que “rojo” coincidirá solo con la palabra “rojo” y no con cualquier cadena de letras que la contenga, como “ rojo undant” o “ti rojo.” Lo hace buscando solo “rojo” rodeado por lo que se conoce como caracteres constituyentes que no son palabras (es decir, cualquier cosa que no sea una letra, número o guion bajo).
  • La bandera -e precede el patrón a buscar. Admite expresiones regulares por defecto.

Para acelerar grep, puedes usar las banderas --exclude y --include para limitar la búsqueda a ciertos tipos de archivos. Por ejemplo, --exclude='*.csv' no buscará dentro de los archivos con la extensión .csv. --include='*.txt', por otro lado, solo buscará dentro de archivos con la extensión .txt. La bandera puede ser añadida inmediatamente después del comando grep como se muestra a continuación:

grep --exclude='*.csv' -Rw '/path/to/search' -e 'pattern'

También puedes excluir directorios específicos siguiendo el formato a continuación:

grep --exclude-dir='{dir1,dir2,*_old}' -Rw '/path/to/search' -e 'pattern'

Este comando no buscará en ningún directorio en el directorio de trabajo actual nombrado dir1, dir2, o que coincida con el patrón *_old, eliminándolos del proceso de búsqueda. Ejecutará la búsqueda recursiva de coincidencia de palabra completa en todos los demás archivos en el directorio de trabajo actual.

Banderas Interesantes que Puedes Usar con grep

Ahora que has sido presentado correctamente con grep y cómo funciona, aquí hay algunas banderas útiles que puedes adjuntar a tu comando:

  • -i – Hace que grep realice una búsqueda que no distingue entre mayúsculas y minúsculas. Por ejemplo, buscar “Kraken” devolverá un resultado cuando grep encuentre coincidencias para “kraken” o “kRaken”.
  • -n – Muestra números de línea junto a las coincidencias. Esto es especialmente útil para programadores o personas que buscan dentro de archivos de configuración grandes.
  • -R – Al igual que con -r, grep realizará una búsqueda recursiva a través de todas las subcarpetas, pero esta bandera específica seguirá enlaces simbólicos (accesos directos).
  • -s – Suprime los mensajes de error. Si estás recibiendo muchos errores distractores sobre archivos que no existen, que no pueden ser leídos, o que tienen permisos inadecuados, usa esto para que grep pueda limitarse a mostrarte las coincidencias que encuentra.

También lee: Cómo encontrar un archivo en Linux usando el comando Find

Usando find para encontrar una palabra específica en un archivo

Si bien la sintaxis del comando find es más complicada que la de grep, algunos la prefieren.

find . -name "*.php" -exec grep "pattern" {} ;

Este comando usará la bandera -exec de find para pasar los archivos encontrados a grep para la búsqueda. Con una disposición astuta de la sintaxis, puedes usar la búsqueda más rápida del sistema de archivos de find para localizar los tipos de archivos específicos en los que deseas buscar, y luego pasarlos a grep para buscar dentro de los archivos.

Ten en cuenta que find solo mira los nombres de los archivos, no los contenidos. Por eso grep es requerido para buscar texto y contenidos de archivos. Las banderas normales de grep deberían estar completamente operativas desde dentro de la bandera -exec.

Usando ack para encontrar una palabra específica en un archivo

El comando ack es probablemente la herramienta de búsqueda más rápida, pero no es tan popular como grep. El comando a continuación buscará dentro del directorio actual.

ack 'pattern'

Si deseas buscar dentro de un archivo o directorio específico, puedes agregar ese archivo o la ruta completamente calificada a tu búsqueda.

ack 'pattern' /path/to/file.txt

También lee: Cómo instalar y gestionar versiones de Python en Linux

¿Quieres una GUI? Usa Catfish

Si eres alérgico a las terminales, todas las distribuciones de Linux populares ofrecen Catfish, una versátil aplicación GUI que te permite buscar archivos y su contenido para una cadena específica. No es tan avanzada como los comandos discutidos aquí, pero proporciona un servicio valioso a las personas que preferirían una interfaz gráfica.

Grep Catfishgui

Para buscar en el contenido del archivo una palabra específica, haz clic en el menú en la esquina superior derecha de Catfish y selecciona “Buscar contenido del archivo”.

Después de configurarlo, escribe lo que deseas buscar en la barra superior y presiona Enter. ¡Eso es todo!

También lee: Las diferencias entre Su, Sudo Su, Sudo -s y Sudo -i

Preguntas Frecuentes

¿Cómo detengo una búsqueda de grep antes de que termine?

Para detener cualquier proceso en curso en tu terminal, simplemente presiona Ctrl + C en tu teclado. Esto envía una señal para terminar el proceso en ejecución. También es por eso que no puedes usar los atajos normales de copiar/pegar desde dentro de un emulador de terminal.

¿Hay algún administrador de archivos que busque el contenido de los archivos?

Si usas el entorno de escritorio KDE Plasma, su administrador de archivos predeterminado (Dolphin) ya tiene esta capacidad. Cuando haces clic en el botón de búsqueda para buscar archivos, hay una opción para elegir entre nombres de archivos y contenido del archivo debajo de la barra de búsqueda.

Simplemente haz clic en “Contenido” si deseas buscar palabras dentro de los archivos. No será tan avanzado como usar grep, pero hace el trabajo.

¿Hay otros usos para grep?

¡Grep no es solo para buscar en tu sistema de archivos! Curiosamente, puedes canalizarlo a través de casi cualquier comando para buscar en su salida en lugar de tener que encontrar algo manualmente tú mismo.

Grep se puede utilizar para filtrar la salida de comandos y mostrarte cosas que son más relevantes para ti. Experimenta lo suficiente con él y eventualmente dominarás el arte de diagnosticar y conocer tu computadora.

Todas las capturas de pantalla por Miguel Leiva-Gomez.