Ileż to razy się zdarzyło, że człowiek wymyśla koło od nowa… coś takiego właśnie przeżyłem dzisiaj. Obrabiając dłuuugi plik logów na maszynie windowsowej (Win7x64) zacząłem szukać natywnej implementacji grepa, aby sobie uprościć robotę. Zamiast tego, przeżyłem szok odkrywając, że Windows ma już swojego własnego “grepa” – nazywa się FindStr. Narzędzie owo oferuje funkcjonalność zbliżoną do jego linuksowego odpowiednika i muszę przyznać, że miło mi się dzisiaj z nim pracowało. Poniżej lista przełączników, aby uzmysłowić Wam jego możliwości:

FINDSTR [/B] [/E] [/L] [/R] [/S] [/I] [/X] [/V] [/N] [/M] [/O] [/P] [/F:plik]
        [/C:ciąg] [/G:ciąg] [/D:lista katalogów] [/A:atrybuty kolorów]
        [/OFF[LINE]] ciągi [[dysk:][ścieżka]nazwapliku[ ...]]

  /B         Dopasowuje wzorzec, jeżeli znajduje się na początku wiersza.
  /E         Dopasowuje wzorzec, jeżeli znajduje się na końcu wiersza.
  /L         Traktuje ciągi wyszukiwania jako literały.
  /R         Traktuje ciągi wyszukiwania jako wyrażenia regularne.
  /S         Wyszukuje pasujące pliki w katalogu bieżącym i we wszystkich
             podkatalogach.
  /I         Określa wyszukiwanie bez uwzględniania wielkości liter.
  /X         Drukuje wiersze pasujące dokładnie.
  /V         Drukuje tylko wiersze, które nie zawierają dopasowania.
  /N         Drukuje numer wiersza przed każdym pasującym wierszem.
  /M         Drukuje tylko nazwę pliku, jeżeli zawiera on dopasowanie.
  /O         Drukuje przesunięcie, w znakach, przed każdym pasującym wierszem.
  /P         Pomija pliki zawierające znaki niedrukowalne.
  /OFF[LINE] Nie pomija plików z ustawionym atrybutem przesunięcia.
  /A:atryb.  Określa atrybut koloru za pomocą dwóch cyfr szesnastkowych.
             Patrz polecenie "color /?"
  /F:plik    Czyta listę plików z określonego pliku (/ oznacza konsolę).
  /C:ciąg    Używa określonego ciągu wyszukiwania jako literału.
  /G:plik    Pobiera ciągi wyszukiwania z określonego pliku
             (/ oznacza konsolę).
  /D:kat.    Przeszukuje katalogi, nazwy których, rozdzielone przecinkami,
             zostały określone.
  ciągi      Tekst do odszukania.
  [dysk:][ścieżka]nazwapliku
             Określa plik lub pliki do przeszukania.

Użyj spacji do oddzielenia kilku ciągów wyszukiwania, o ile argument nie
zostanie poprzedzony przełącznikiem /C. Na przykład, polecenie
'FINDSTR "witam wszystkich" x.y' odszuka ciągów "witam" lub "wszystkich"
w pliku x.y. Polecenie 'FINDSTR /C:"witam wszystkich" x.y' odszuka ciągu
"witam wszystkich" w pliku x.y.

Szybka pomoc na temat wyrażeń regularnych:
  .        Symbol wieloznaczny: dowolny znak
  *        Powtórzenie: zero lub więcej wystąpień poprzedniego znaku lub klasy
  ^        Pozycja w wierszu: początek wiersza
  $        Pozycja w wierszu: koniec wiersza
  [klasa]  Klasa znaków: dowolny znak z zestawu
  [^klasa] Odwrócona klasa: dowolny znak nie należący do zestawu
  [x-y]    Zakres: dowolny znak z określonego zakresu
  \x       Znak ucieczki: literalne użycie metaznaku x
  \    pozycja w wyrazie: koniec wyrazu

Tak więc: nie szukajmy już grepa dla Windowsa – on już tam jest 🙂