FreeBSD i greep czyli jak znaleźć coś w pliku
! 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