====== grep ====== =====Wyszukiwanie wzorców w plikach===== **grep** to potężne narzędzie w systemach Unix/Linux, służące do wyszukiwania wzorców tekstowych w plikach lub strumieniach danych. Nazwa //grep// pochodzi od polecenia edytora tekstu **g/re/p**, co oznacza //globalnie wyszukaj wyrażenie regularne i wyświetl linie//. {{page>:szablon:gfx:terminal}} ===== Składnia ===== ''grep [opcje] wzorzec [plik...]'' ===== Najważniejsze Opcje ===== * ''-i'', ''--ignore-case'' - Ignoruje wielkość liter podczas wyszukiwania. * ''-v'', ''--invert-match'' - Zwraca linie, które **nie** pasują do wzorca. * ''-r'', ''--recursive'' - Przeszukuje katalogi rekurencyjnie, przetwarzając wszystkie pliki w podkatalogach. * ''-l'', ''--files-with-matches'' - Wyświetla tylko nazwy plików, które zawierają pasujące linie. * ''-n'', ''--line-number'' - Wyświetla numery linii, w których znaleziono dopasowanie. * ''-H'', ''--with-filename'' - Wyświetla nazwy plików przed każdą dopasowaną linią (przydatne przy przeszukiwaniu wielu plików). * ''-c'', ''--count'' - Zlicza i wyświetla liczbę pasujących linii w każdym pliku. * ''-E'', ''--extended-regexp'' - Umożliwia używanie rozszerzonych wyrażeń regularnych (równoważne z użyciem polecenia ''egrep''). * ''-o'', ''--only-matching'' - Wyświetla tylko tę część linii, która pasuje do wzorca. ===== Przykłady użycia ===== ===== Podstawowe wyszukiwanie wzorca w pliku ===== Podstawowym zastosowaniem polecenia **grep** jest przeszukiwanie plików w poszukiwaniu określonego wzorca tekstowego. W najprostszej formie, polecenie to przyjmuje dwa argumenty: **wzorzec**, który chcesz znaleźć, oraz **nazwę pliku**, w którym chcesz dokonać wyszukiwania. * Składnia: ''grep "wzorzec" plik.txt'' W tym przypadku ''grep'' przeszuka plik ''plik.txt'' i zwróci wszystkie linie, które zawierają tekst zgodny z podanym wzorcem. ===== Przykład zastosowania ===== Załóżmy, że masz plik tekstowy o nazwie ''dokument.txt'', który zawiera następujący tekst: Ala ma kota. Kot ma na imię Filemon. Kot lubi spać na kanapie. Pies biega za kotem. Jeśli chcesz znaleźć wszystkie linie, w których występuje słowo //kot//, możesz użyć następującego polecenia: * Przykład polecenia: ''grep "kot" dokument.txt'' Wynik tego polecenia będzie wyglądał następująco: Ala ma kota. Pies biega za kotem. Jak widać, ''grep'' zwrócił wszystkie linie, które zawierają wzorzec //kot//, niezależnie od tego, w którym miejscu w linii ten wzorzec się znajduje. ===== Uwagi dotyczące wyszukiwania ===== * Dokładne dopasowanie: ''grep'' wyszukuje dokładne dopasowania wzorca w pliku. W powyższym przykładzie, ''grep'' zwrócił linie zawierające //kot//, ale także te, gdzie //kot// jest częścią dłuższego słowa, jak //kotem//. * Uwzględnianie wielkości liter: Wyszukiwanie w trybie domyślnym uwzględnia wielkość liter, co oznacza, że wzorzec //Kot// jest traktowany inaczej niż //kot//. Aby wyszukać wzorzec bez względu na wielkość liter, można użyć opcji ''-i'': ''grep -i "kot" dokument.txt'' Wynikiem będzie wyszukanie wszystkich //kotów//, dużych i małych. Ala ma kota. Kot ma na imię Filemon. Kot lubi spać na kanapie. Pies biega za kotem. * Wielokrotne wystąpienia: ''grep'' wyświetla wszystkie linie, w których występuje wzorzec, niezależnie od tego, ile razy wzorzec pojawia się w jednej linii. Podstawowe wyszukiwanie wzorca w pliku za pomocą ''grep'' to narzędzie, które jest niezwykle przydatne przy analizie plików tekstowych, logów systemowych, a także przy przetwarzaniu danych w różnych formatach. Aby wypisać wszystkie wystąpienia wzorca (np. słowa //kot//) w jednym wierszu, jeżeli pojawia się on więcej niż raz, można użyć polecenia grep w połączeniu z opcją ''-o'', która wyświetla tylko dopasowane fragmenty. Przykład: * Wypisywanie wszystkich wystąpień wzorca z jednego wiersza Jeśli w jednym wierszu pliku znajduje się więcej niż jedno wystąpienie wzorca, a chcesz wypisać każde z nich osobno, możesz użyć polecenia ''grep'' z opcją ''-o''. * Składnia: ''grep -o "wzorzec" plik.txt'' W tym przypadku ''grep'' zwróci każde wystąpienie wzorca //wzorzec// w osobnej linii. Przykład: Załóżmy, że masz plik tekstowy o nazwie ''dokument.txt'', który zawiera następujący tekst w jednym wierszu: ''kot, kotek i jeszcze jeden kot.'' Jeśli chcesz wypisać wszystkie wystąpienia słowa //kot// w tym wierszu, możesz użyć następującego polecenia: * Przykład polecenia: ''grep -o "kot" dokument.txt'' Wynik tego polecenia będzie wyglądał następująco: kot kot kot Każde wystąpienie słowa //kot// zostało wyświetlone w osobnej linii. ===== Uwagi ===== * Każde wystąpienie: Opcja ''-o'' powoduje, że ''grep'' zwraca każde wystąpienie wzorca w nowej linii, co pozwala zobaczyć dokładną liczbę wystąpień wzorca w danym wierszu. * Zastosowanie z innymi poleceniami: Wynik można przekierować do innych poleceń, takich jak ''wc -l''`, aby policzyć liczbę wystąpień wzorca: ''grep -o "kot" dokument.txt | wc -l'' To polecenie policzy, ile razy wzorzec "kot" występuje w pliku ''dokument.txt'' i zwróci liczbę wystąpień: ''3''. Polecenie ''grep -o'' jest szczególnie przydatne, gdy chcesz dokładnie przeanalizować częstotliwość występowania danego wzorca w tekście lub gdy musisz przetwarzać dane, które mogą zawierać wiele wystąpień tego samego wzorca w jednej linii. ====Ignorowanie wielkości liter podczas wyszukiwania==== ''grep -i "wzorzec" plik.txt'' ====Wyszukiwanie w wielu plikach jednocześnie==== ''grep "wzorzec" plik1.txt plik2.txt'' ====Rekurencyjne przeszukiwanie katalogu==== ''grep -r "wzorzec" /sciezka/do/katalogu'' ====Wyświetlenie tylko nazw plików zawierających wzorzec==== ''grep -l "wzorzec" *.txt'' ====Zliczenie liczby wystąpień wzorca w pliku==== ''grep -c "wzorzec" plik.txt'' ===== Zaawansowane Zastosowania ===== * **Wyszukiwanie za pomocą wyrażeń regularnych**: ''grep -E "wzor[aeiou]c" plik.txt'' * **Wyszukiwanie odwrotne (linii niepasujących)**: ''grep -v "wzorzec" plik.txt'' * **Wyszukiwanie i wyświetlanie tylko dopasowanych fragmentów linii**: ''grep -o "wzorzec" plik.txt'' ===== Zastosowanie w Skryptach ===== **grep** jest niezwykle przydatnym narzędziem w skryptach powłoki (shell scripts) do filtrowania wyników, analizy logów, czy wyszukiwania specyficznych wzorców w dużych zbiorach danych. Dzięki możliwości przetwarzania wyrażeń regularnych, grep staje się wszechstronnym narzędziem do pracy z tekstem. ===== Podsumowanie ===== **grep** to jedno z najpotężniejszych narzędzi w arsenale każdego użytkownika Unix/Linux, umożliwiające szybkie i efektywne wyszukiwanie wzorców w plikach i strumieniach danych. Jego elastyczność i możliwość wykorzystania wyrażeń regularnych sprawiają, że jest niezastąpione zarówno w codziennej pracy z plikami tekstowymi, jak i w zaawansowanych zadaniach administracyjnych i programistycznych. {{indexmenu>:polecenia#1}}