Su Unix, Linux e derivati esiste da sempre il potentissimo comando grep che permette di cercare una stringa di testo all’interno dei files, purtroppo grep non esiste nativamente in Windows ma il comando FINDSTR può essere considerato una valida alternativa e risulta molto utile in tutti quei casi in cui lavorando dal prompt dei comandi sia necessario fare ricerche di testo all’interno di molti files.
Per usare FINDSTR in Windows per la ricerca di testo all’interno dei files dovete prima aprire un prompt dei comandi (start -> esegui -> cmd.exe) :
C:\>
qui potete digitare il comando
findstr /? | more
per avere un elenco completo della sintassi da usare, sono supportate anche le ricerche con espressioni regolari o con wildcards, vediamo comunque alcuni semplici esempi pratici del suo utilizzo.
findstr /i /s “failed” c:\logs\*.log
cerca la parola “failed” all’interno di tutti i files di log (*.log) presenti nella cartella c:\logs\ e nelle sotto-cartelle, nel nostro caso il risultato è :
c:\logs\20180627_backup.log:Failed to write file.
c:\logs\20190410_backup.log:Failed to write file.
viene quindi riportato il nome del file di log del backup dove è stata trovata la stringa di testo da ricercare e la stringa stessa, da notare che con il parametro /i abbiamo detto a findstr di ignorare maiuscole e minuscole ed infatti anche se cerchiamo “failed” troviamo Failed che ha la F maiuscola
findstr /i /s /b /n “failed” c:\logs\*log
in questo caso cerchiamo sempre la parola “failed” ma solo se è presente all’inizio della riga del nostro file, inoltre chiediamo anche il numero di riga in cui è stata trovata la parola all’interno del file, l’output quindi sarà :
c:\logs\20180627_backup.log:6:Failed to write file.
c:\logs\20190410_backup.log:7:Failed to write file.
findstr /i /s /c:”failed to write” c:\logs\*.log
cerca la stringa esatta “failed to write” all’interno di tutti i files di log
findstr /i /s “failed error warning” c:\logs\*.log
cerca le parole “failed” o “error” o “warning” all’interno di tutti i files di log
netstat | findstr /i “win10”
in questo esempio invece usiamo findstr per semplificarci la vita e filtrare il risultato del comando netstat con una redirezione | (pipe) in modo da avere come risultato finale solo le connessioni verso una macchina che si chiama WIN10, nel nostro caso l’oitput sarà :
TCP 192.168.20.10:51794 WIN10:5900 ESTABLISHED
se non avessimo filtrato con findstr l’output di netstat sarebbe stato molto più lungo e difficile da leggere
Come vedete FINDSTR è un comando potente, flessibile e velocissimo che è molto utile quando stiamo lavorando da riga di comando ed abbiamo bisogno di fare ricerche veloci all’interno di files di testo oppure dobbiamo filtrare l’output di altri comandi, è insomma una valida alternativa al comando GREP che si trova normalmente su Linux.
Per la sintassi completa del comando FINDSTR potete anche fare riferimento a questa pagina web del supporto tecnico di Microsoft dove vengono riportate tutte le opzioni e fatti altri esempio di uso :
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/findstr