Desbloquea el poder de estos equivalentes de grep en Windows

Cansado de usar las mismas herramientas de búsqueda en tu máquina, ¿como grep? ¿Por qué conformarse? Muchos equivalentes de grep en Windows pueden ayudar a buscar precisamente lo que estás buscando.

En este tutorial, aprenderás cómo estos equivalentes de grep hacen posible buscar a través de archivos más rápido y encontrar la información que necesitas en un abrir y cerrar de ojos.

¡Mantente atento y hazte amigo de herramientas de búsqueda poderosas!

Prerrequisitos

Este tutorial comprende demostraciones prácticas. Para seguir adelante, asegúrate de tener lo siguiente en su lugar:

  • A Window machine – This tutorial uses Windows 10 PC, but any version of Windows will suffice.
  • PowerShell: este tutorial utiliza PowerShell 7.2.8.
  • scoop: este tutorial utiliza scoop v0.3.1.

Búsqueda de Cadenas de Texto Específicas (findstr) Dentro de Archivos

Poder detectar instantáneamente cadenas de texto específicas (con patrones particulares) que estás buscando en un archivo ayuda enormemente con tu flujo de trabajo. ¿Pero cómo? Recurre al utilitario de línea de comandos findstr en Windows, que te permite buscar cadenas de texto específicas dentro de archivos.

findstr se utiliza a menudo como equivalente a grep en Windows, ya que tiene funcionalidades similares al comando Unix grep. ¿Cuáles son los beneficios de usar findstr? Un ejemplo es que está integrado en cualquier sistema operativo (SO) de Windows, no se requiere software adicional.

Para encontrar cadenas específicas en un archivo, sigue estos pasos:

Crea un archivo de texto con tu editor de texto preferido, nómbralo notes.txt y agrega el siguiente contenido al archivo.

Hello, world. This is an example of a text file.
I am writing some notes in this file.
Here are some keywords to search for: apple banana cherry.

Ahora, abre PowerShell como administrador y ejecuta el siguiente comando para encontrar cadenas (findstr) según el patrón de búsqueda (”apple") en el archivo notes.txt.

? findstr tiene muchos parámetros que se pueden usar para personalizar la búsqueda. Pero en este tutorial, explorarás algunos de los parámetros más valiosos al buscar cadenas en archivos.

findstr "apple" "C:\\myfiles\\notes.txt
Searching text strings with the word apple in it

? Tal vez estés buscando cadenas en varios archivos. Si es así, especifica las rutas de los archivos separadas por espacios, como en el siguiente ejemplo: findstr parameters "pattern" "C:\\path\\to\\file1.txt" "C:\\path\\to\\file2.txt"

Encontrar Cadenas que Coinciden con un Patrón Específico o Literal

Cuando trabajas con archivos de configuración, encontrar cadenas en un patrón específico o literal es crucial, especialmente en la depuración. Afortunadamente, el parámetro /c le indica al comando findstr que busque cadenas literales que coincidan con un patrón especificado, incluyendo espacios o caracteres especiales.

Adjuntar el parámetro /c al comando findstr resulta útil en situaciones como las siguientes, aunque no se limita a ellas:

  • Búsqueda de una frase específica o conjunto de palabras que aparecen en un orden particular.
  • Búsqueda de una cadena que contiene espacios o caracteres especiales.

Para ver cómo funciona el parámetro /c en acción, sigue estos pasos:

1. Ejecuta el comando findstr a continuación para buscar la cadena literal (/c) banana cherry en el archivo *notes.txt*.

findstr /c:"banana cherry" "C:\myfiles\notes.txt"

En la salida a continuación, el comando findstr solo devuelve líneas que contienen la cadena exacta banana cherry con un espacio entre las dos palabras.

Ten en cuenta que el parámetro /c distingue entre mayúsculas y minúsculas, por lo que el comando findstr solo devuelve la cadena con el mismo caso de letra que especificaste. Si alguna de las cadenas en el archivo notes.txt no coincide con el patrón especificado, el comando findstr devuelve una salida en blanco.

Searching for a literal string

2. A continuación, agrega la siguiente línea al archivo notes.txt y guarda los cambios.

En este punto, debería haber dos líneas en tu archivo notes.txt con la cadena “hello”. Una en minúsculas (hello, world.) y otra con una ‘H’ en mayúscula (Hello, world.).

hello, world.

3. Ahora, ejecuta cada comando a continuación para buscar la cadena literal hello, world o Hello, world en el archivo notes.txt.

# Patrón todo en minúsculas
findstr /c:"hello, world" "C:\myfiles\notes.txt"
# Con la letra 'H' en mayúscula
findstr /c:"Hello, world" "C:\myfiles\notes.txt"

Observa a continuación que a pesar de tener dos líneas que contienen la cadena ‘hello, world’ en el archivo notes.txt, solo obtienes una línea de cadena.

El parámetro /c indica al comando findstr que imprima líneas que contienen la cadena ‘hello, world’ con minúsculas o mayúsculas ‘H’.

Searching for the ‘hello, world’ literal string with the lowercase ‘h’

4. Por último, ejecuta el comando findstr a continuación para buscar cadenas que contengan el patrón hello en el archivo notes.txt mientras ignora (/i) el caso de las letras.

Las búsquedas sensibles a mayúsculas y minúsculas funcionan bien si ya conoces el caso real de las letras de la cadena que estás buscando. Pero si deseas ver todas las líneas de cadenas que coinciden con un patrón independientemente del caso de las letras, el parámetro /i hará el truco.

findstr /i "hello" "C:\myfiles\notes.txt"
Searching strings while Ignoring the letter case

Encontrar Cadenas Especificadas Dentro de Archivos y Directorios

Además de buscar cadenas específicas en archivos, el comando findstr te permite buscar cadenas coincidentes dentro de archivos, directorios y subdirectorios.

Supongamos que deseas encontrar todos los archivos en un directorio que tienen una palabra específica en su contenido. Si es así, deja que el parámetro /s haga el trabajo sucio.

Ejecuta el siguiente comando para buscar (/s) en el directorio actual y sus subdirectorios (/s) todos los archivos (*.*) que contienen la cadena system, ignorando mayúsculas y minúsculas (-i).

Ten en cuenta que este comando solo busca archivos que contienen la cadena system como una palabra completa y no aquellos que son parte de palabras más largas, como sistemático o sistematizar.

findstr /s /i system *.*

La salida a continuación muestra una lista de nombres de archivos, uno por línea, con el nombre de cada archivo que contiene la cadena ‘system’.

Finding specified strings within files, directories, and subdirectories

Búsqueda de Cadenas Usando el cmdlet Select-String

Hasta ahora, has visto que el comando findstr funciona excelentemente para encontrar cadenas, pero el cmdlet Select-String no debe ser pasado por alto. Este cmdlet es un equivalente de grep en Windows que te permite buscar patrones de texto específicos en archivos y cadenas.

El cmdlet Select-String está diseñado para eficiencia, te permite buscar rápidamente a través de grandes cantidades de texto y admite expresiones regulares (regexes). A su vez, este cmdlet te permite buscar patrones aún más complejos que findstr.

Para ver cómo funciona el cmdlet Select-String, sigue estos pasos:

1. Abre primero el archivo notes.txt, añade las siguientes líneas y guarda los cambios.

Agregar estas líneas es una preparación para demostrar cómo el cmdlet Select-String maneja las mayúsculas y minúsculas en los siguientes pasos.

Apple
APPLE
ApplE

2. Luego, ejecuta el siguiente comando para buscar la cadena apple en el archivo notes.txt.

Select-String -Pattern "apple" -Path "C:\myfiles\notes.txt"

A continuación, varias líneas contienen la cadena ‘apple’ pero en diferentes casos de letras, ya que el cmdlet Select-String no distingue entre mayúsculas y minúsculas. Pero lo bueno es que puedes identificar y verificar fácilmente las cadenas coincidentes, ya que están resaltadas.

Searching for a string in a text file

? Tal vez desees utilizar la coincidencia de cadenas simple en lugar de la coincidencia de regex. Si es así, agrega el parámetro -SimpleMatch, como se muestra a continuación, y nunca te preocupes por la sintaxis de regex y los caracteres especiales. Select-String 'APPLE' "C:\\myfiles\\notes.txt" -SimpleMatch

3. Ahora, ejecuta el siguiente comando para buscar APPLE en el archivo notes.txt con sensibilidad a mayúsculas y minúsculas habilitada (-CaseSensitive). El parámetro -CaseSensitive es útil para una búsqueda precisa.

Select-String -Pattern 'APPLE' -Path "C:\myfiles\notes.txt" -CaseSensitive

Como puedes ver a continuación, la única coincidencia encontrada tiene el mismo caso de letras que especificaste (APPLE).

Searching for a string with case sensitivity enabled

4. Por último, ejecuta el siguiente comando utilizando regex para buscar el patrón '\?' (un signo de interrogación) en todos los archivos de texto (*.txt) en el directorio $PSHOME\en-US. Un regex te permite buscar patrones más complejos.

Select-String -Path "$PSHOME\en-US\*.txt" -Pattern '\?’

Si el contenido de un archivo tiene un signo de interrogación, el comando devuelve la ruta completa del archivo a la consola, como se muestra a continuación.

Searching for a string (a question mark) in files using regex

Usando ripgrep (rg) como un equivalente de grep en Windows

rg es una utilidad de línea de comandos de código abierto diseñada para buscar rápidamente a través de archivos utilizando patrones de expresiones regulares. Como otras utilidades de línea de comandos, rg tiene muchas opciones y características para personalizar sus búsquedas.

Pero a diferencia de findstr y el cmdlet Select-String, rg no está instalado en su sistema operativo Windows de forma predeterminada.

Para usar rg como su equivalente de grep en Windows:

1. Ejecute el siguiente comando de scoop para instalar ripgrep en su sistema. scoop install ripgrep

scoop install ripgrep
Installing ripgrep on your system

2. A continuación, ejecute el siguiente comando rg para verificar la versión instalada de rg.

rg --version

Como se muestra a continuación, verá el número de versión de rg instalado. En este punto, ahora puede ejecutar comandos rg para buscar cadenas.

Verifying rg is installed

3. Ejecute el siguiente comando rg para buscar la cadena apple en el archivo notes.txt.

rg apple C:\myfiles\notes.txt

La salida muestra cualquier línea en el archivo notes.txt que contenga la cadena apple, como se muestra a continuación.

Note que la salida es similar a la salida del cmdlet Select-String. Pero en lugar de resaltar, rg cambia el color de la cadena coincidente y del número de línea para una rápida distinción.

Searching for the string ‘apple’ in a text file

4. Ahora, ejecute el siguiente comando utilizando expresiones regulares para buscar cadenas en el archivo notes.txt.

El regex a continuación utiliza límites de palabra (`\b`) y le dice a `rg` que busque líneas de cadenas que contengan una palabra que comience con ‘s’ y termine con ‘e’ (`s\w+e`).

rg "\bs\w+e\b" "C:\myfiles\notes.txt"
Search for strings using regex

Filtrando Búsquedas por Tipo de Archivo Específico

Tal vez tenga una preferencia sobre en qué directorio se encuentra el archivo que está buscando, pero no sobre el nombre del archivo. En tales casos, buscar el contenido del archivo mientras se filtra la búsqueda por tipo de archivo puede ser su mejor opción.

Filtrar la búsqueda a tipos de archivo específicos puede ser útil cuando solo está interesado en buscar tipos de archivos particulares. O cuando desea excluir ciertos tipos de archivos de la búsqueda.

Para filtrar la búsqueda a tipos de archivo específicos, la opción `–type` hará el truco de la siguiente manera:

1. Ejecute el siguiente comando `rg` para buscar la cadena `apple` en todos los archivos de texto (`–type txt`) en el directorio `C:\\myfiles`.

La opción `–type` toma un tipo de archivo como argumento, lo que le indica al comando `rg` que solo busque archivos que coincidan con el tipo de archivo especificado.

rg "apple" "C:\myfiles" --type txt

La salida a continuación muestra la línea que contiene la cadena ‘apple‘ y el nombre de archivo asociado (notes.txt).

Filtering the search to specific file types

2. A continuación, cree un XML llamado notes.xml y rellene el código a continuación. Este archivo XML es solo una preparación para demostrar cómo funcionan las búsquedas con comodines.

<?xml version="1.0" encoding="UTF-8"?>
<fruitBasket>
  <fruit id="1">
    <fruitName>Apple</fruitName>
  </fruit>     
</fruitBasket>

3. Ahora, ejecuta el siguiente comando para buscar la cadena apple en todos los archivos (*.). Este comando solo busca archivos txt y xml según se especifica con (-g).

rg "apple" "C:\myfiles" -g '*.{txt,xml}

Por defecto, rg distingue entre mayúsculas y minúsculas. Como resultado, la salida muestra solo la línea que contiene la cadena exacta ‘apple’ y el archivo asociado.

Filtering searches by a broader range of file types

4. Finalmente, ejecuta el siguiente comando, como lo hiciste en el paso tres, para buscar la cadena apple en todos los archivos (*.) que tengan la extensión txt o xml. Pero esta vez, agrega la opción -i, que le indica a rg que ignore las mayúsculas.

rg "apple" "C:\myfiles" -g '*.{txt,xml}-i
Filtering searches by a broader range of file types ignoring letter cases

Conclusión

A lo largo de este tutorial, has aprendido muchos equivalentes de grep en Windows para buscar cadenas de texto de manera literal y utilizando expresiones regulares. Has desbloqueado el poder de estos equivalentes de grep con una variedad de opciones y parámetros para personalizar la búsqueda y filtrar tipos de archivos específicos.

En este punto, deberías sentirte seguro al depurar problemas, identificar cuestiones y buscar a través de grandes conjuntos de archivos de texto.

Ahora, ¿por qué no poner a prueba tus nuevas habilidades practicando con expresiones regulares y personalizando tus búsquedas?

Source:
https://adamtheautomator.com/grep-equivalents-in-windows/