El Comando FIND
Para buscar texto en varios archivos desde la línea de comandos de Windows o archivos de lote, puedes utilizar el comando FIND, que ha estado presente desde los días de MS DOS y todavía está disponible en Windows 11. Es similar al comando Unix grep
, pero no admite expresiones regulares. Si deseas buscar la palabra borogoves
en el directorio actual, sigue esta sintaxis:
find "borogoves" *
Tenga en cuenta que las comillas dobles alrededor del patrón son obligatorias. Si estás usando PowerShell, necesitarás incluir comillas simples también:
find '"borogoves"' *
En lugar del asterisco (*
), puedes especificar una máscara de archivo como *.htm?
. El comando find
muestra los nombres de los archivos que escanea, incluso si no encuentra coincidencias en estos archivos:
La búsqueda es sensible a mayúsculas y minúsculas de forma predeterminada, por lo que generalmente necesitas agregar el interruptor /I
para tratar las letras mayúsculas y minúsculas como equivalentes:
find /I "<a href=" *.htm
Si no especificas el archivo en el que buscar, find
esperará la entrada de texto de stdin, para que puedas canalizar la salida de otro comando. Por ejemplo, puedes listar todos los comandos de copia soportados en Windows:
help | find /i "copy"
Otro interruptor, /V
, te permite encontrar todas las líneas que no contienen el patrón, similar al comando grep -v
.
En archivos de lote, puedes usar el hecho de que el comando find
establece el código de salida (errorlevel) en 1 si el patrón no se encuentra. Por ejemplo, puedes verificar si la máquina está ejecutando una versión de 64 bits o 32 bits de Windows:
@echo off rem Based on KB556009 with some corrections reg Query "HKLM\Hardware\Description\System\CentralProcessor\0" /v "Identifier" | find /i "x86 Family" > nul if errorlevel 1 goto win64 echo 32-bit Windows goto :eof :win64 rem Could be AMD64 or ARM64 echo 64-bit Windows
El comando FINDSTR: Búsqueda de Expresiones Regulares
Si necesitas buscar una expresión regular, prueba el comando FINDSTR
, introducido en Windows XP. Por razones históricas, findstr
soporta un subconjunto limitado de expresiones regulares, por lo que solo puedes usar estas características de regex:
- El punto
.
coincide con cualquier carácter excepto salto de línea y caracteres ASCII extendidos. - Listas de caracteres
[abc]
coinciden con cualquiera de los caracteres especificados (a
,b
, oc
). - Rangos de listas de caracteres
[a-z]
coinciden con cualquier letra dea
az
. - El asterisco (
*
) indica que el carácter anterior puede repetirse cero o más veces. - Los símbolos
\<
y\>
marcan el inicio y el final de una palabra. - El acento circunflejo (
^
) y el signo de dólar ($
) denotan el inicio y el final de una línea. - La barra invertida (
\
) escapa cualquier metacarácter, permitiéndote encontrar caracteres literales. Por ejemplo,\$
encuentra el signo de dólar en sí.
Findstr no soporta clases de caracteres (\d
), alternancia (|
), u otras repeticiones (+
o {5}
).
La sintaxis básica es la misma que para el comando FIND
:
findstr "\<20[0-9][0-9]\>" *.htm
Este comando encuentra todos los años que comienzan con 2000 en los archivos .htm
del directorio actual. Al igual que con find
, utilice el interruptor /I
para una búsqueda sin distinción de mayúsculas y minúsculas:
Limitaciones y peculiaridades de FINDSTR
Las listas de caracteres [a-z]
siempre son sin distinción de mayúsculas y minúsculas, por lo que echo ABC | findstr "[a-z]"
coincide.
El carácter de espacio funciona como el metacarácter de alternancia en findstr
, por lo que una consulta de búsqueda como findstr "new shoes" *
encontrará todas las líneas que contengan new
o shoes
. Desafortunadamente, no hay manera de escapar del espacio y usarlo como un carácter literal en una expresión regular. Por ejemplo, no puedes encontrar líneas que comiencen con un espacio.
Errores de sintaxis en la expresión regular se ignoran. Por ejemplo, findstr "[" *
coincidirá con todas las líneas que contengan el carácter [
.
Si el archivo contiene saltos de línea de Unix (LF), el metacarácter $
no funciona correctamente. Si la última línea de un archivo carece de un terminador de línea, findstr
no podrá encontrarlo. Por ejemplo, findstr "</html>$" *
no funcionará si no hay CR+LF después de </html>.
Las primeras versiones de Windows tenían limitaciones en la longitud de línea para find
y findstr
, así como para otros comandos. Las versiones recientes eliminaron estos límites, por lo que ya no tienes que preocuparte por ellos. Consulta esta pregunta de StackOverflow para conocer las limitaciones y errores de findstr
, especialmente en las primeras versiones de Windows.
El comando findstr opera en el código de página OEM (MS DOS); el metacarácter punto no coincide con ninguno de los caracteres ASCII extendidos. Como resultado, el comando no es muy útil para texto no inglés. Además de eso, no puedes buscar caracteres Unicode (UTF-8 o UTF-16).
Conclusión
Puedes informarte sobre otros interruptores escribiendo findstr /?
o find /?
. Por ejemplo, los interruptores adicionales te permiten buscar en subdirectorios o imprimir números de línea. También puedes consultar la documentación oficial.
En general, los comandos find
y findstr
están desactualizados y vienen con varias peculiaridades y limitaciones.
Source:
https://dzone.com/articles/search-from-the-windows-command-prompt