====== 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}}