FreeBSD i greep czyli jak znaleźć coś w pliku

Spis treści

! Potęga shella nie podlega dyskusji 🙂 Do zabawy wykorzystamy dobrze znanego grepa, który parsuje pliki pod kątem występowania określonego tekstu.

Składnia grepa jest dosyć prosta:

grep "<em>szukany łańcuch"</em> ścieżka

Przykład 1

Szukamy łańcucha “marchewka” we wszystkich plikach tekstowych w naszym homie (/home/slav/*.txt)
$ grep "marchewka" /home/slav/*.txt

Przykład 2 – rekursywnie

$ grep -r "marchewka" /home/slav/*.txt

Przykład 3 – chcemy tylko nazwy plików

Domyślnie grep pokazuje linię w której znalazł trafienie, korzystając z opcji -H może pokazać tylko nazwę pliku, w której znalazł trafienie.
$ grep -H -r “marchewka” /home/slav

Jeżeli jest potrzeba bardziej do przyciąć można to zrobić tak:
$ grep -H marchewka /home/slav/* -R | cut -d: -f1

Istotna informacja dla cuta, po -d wstawiamy znaczek, do którego robimy cięcie. Jeżeli jednak nasze pliki zawierają w nazwie : albo jest nam potrzebny do innych celów można zrobić to wszystko prościej:
$ grep -H "marchewka" /home/slav/* -R -l
Mi sam przykład potrzebny był do skasowania wszystkich maili oznaczonych jako SPAM, więc:
grep -H "X-Spam-Flag: YES" -l -R * >> lista.txt
I teraz kasujemy xargs rm < lista.txt