findstr

Wyszukuje ciągi tekstowe lub wyrażenia regularne w plikach.

findstr to windowsowy odpowiednik uniksowego grep — przeszukuje pliki linijka po linijce i wypluwa te, które pasują do podanego ciągu albo wyrażenia regularnego. Działa w wierszu poleceń (cmd) i jest na każdym Windowsie out of the box, więc nie musisz nic instalować. Świetnie nadaje się do grzebania w logach, szukania ustawienia w plikach konfiguracyjnych albo filtrowania wyjścia innej komendy przez potok.

Składnia i najważniejsze opcje

Podstawowa forma to findstr [opcje] "wzorzec" [pliki]. Uwaga: wszystkie flagi muszą stać przed wzorcem i nazwami plików.

  • /i — ignoruje wielkość liter (case-insensitive).
  • /s — przeszukuje bieżący katalog i wszystkie podkatalogi.
  • /r — traktuje wzorzec jako wyrażenie regularne (a /l wymusza zwykły tekst).
  • /c:"tekst" — szuka dosłownie całego ciągu, łącznie ze spacjami, zamiast traktować spacje jako separator słów.
  • /v — wypisuje tylko linie, które nie pasują do wzorca.
  • /n — dokleja numer linii do każdego trafienia.
  • /m — pokazuje tylko nazwę pliku, w którym jest dopasowanie (bez treści).
  • /b i /e — dopasowanie tylko na początku (/b) albo na końcu (/e) linii.

Przykłady użycia

  • findstr "error" app.log — wypisuje wszystkie linie z app.log zawierające słowo error.
  • findstr /i /s "TODO" *.cs — szuka TODO bez względu na wielkość liter we wszystkich plikach .cs w katalogu i podkatalogach.
  • findstr /n /c:"connection timeout" server.log — znajduje dokładną frazę ze spacją i pokazuje numery linii.
  • ipconfig | findstr /i "ipv4" — filtruje wyjście innej komendy przez potok, zostawiając tylko linie z adresem IPv4.
  • findstr /r "^[0-9][0-9]*$" liczby.txt — używa regexa, by wyłapać linie złożone wyłącznie z cyfr.

Częste błędy i pułapki

Najczęstsza wpadka: spacja we wzorcu. findstr "plik nie znaleziono" szuka linii zawierających plik LUB nie LUB znaleziono, bo spacja to separator słów. Chcesz całej frazy? Użyj /c:"plik nie znaleziono".

Druga pułapka to regex: silnik findstr jest okrojony i nie zna nowoczesnej składni. Nie ma \d, + ani {n} — masz tylko klasy [...], *, ., ^ i $. Próba użycia rozszerzonego regexa cicho nie zadziała tak, jak myślisz.

Po trzecie: findstr krztusi się plikami w Unicode (UTF-16) — potrafi zwracać puste wyniki tam, gdzie dopasowanie ewidentnie jest. W takim przypadku lepiej sięgnąć po PowerShell. I pamiętaj, że ścieżki ze spacjami zawijaj w cudzysłów.

Komendy pokrewne: find (prostszy, bez regexa), where (lokalizowanie plików), a w PowerShell Select-String oraz uniksowy grep.