Porady Admina: grep
Ostatnia aktualizacja: 15 września 2023, 20:06
W dzisiejszym wpisie z cyklu Porady Admina przybliżę program grep.
grep szuka WZORCÓW w każdym PLIKU. Wzorców może być więcej niż jeden, należy je wówczas rozdzielić znakiem nowego wiersza, przy czym grep wypisze każdy wiersz pasujący do któregoś z wzorców. WZORCE powinny być zwykle cytowane, jeśli grep jest używany jako polecenie powłoki.
Program grep dostępny jest w większości dystrybucji Linux.
Wybór i interpretacja wzorców:
-B, –before-context=ILE :wypisanie ILU linii kontekstu przed
-A, –after-context=ILE : wypisanie ILU linii kontekstu po
-C, –context=ILE : wypisanie ILU linii kontekstu
-ILE : to samo co –context=ILE”
-E, –extended-regexp : WZORCE są rozszerzonymi wyrażeniami regularnymi
-F, –fixed-strings : WZORCE są napisami
-G, –basic-regexp : WZORCE są podstawowymi wyrażeniami regularnymi
-P, –perl-regexp : WZORCE są wyrażeniami regularnymi perla
-e, –regexp=WZORCE : dopasowanie do WZORCÓW
-f, –file=PLIK : użycie wzorców z PLIKU
-i, –ignore-case : ignorowanie rejestru liter
–no-ignore-case : bez ignorowania rejestru liter (domyślnie)
-w, –word-regexp : dopasowanie WZORCÓW tylko do pełnych słów
-x, –line-regexp : dopasowanie WZORCÓW tylko do całych linii
-z, –null-data : linie są zakończone bajtem 0, nie znakiem nowej linii
Sterowanie danymi wyjściowymi:
-m, –max-count=ILE : zatrzymanie po ILU wybranych liniach
-b, –byte-offset : wypisanie pozycji bajtów w wyniku
-n, –line-number : wypisanie numerów linii w wyniku
–line-buffered : opróżnienie bufora po każdej linii
-H, –with-filename : wypisanie nazwy pliku dla każdej linii
-h, –no-filename : bez nazwy pliku w liniach wyjściowych
–label=ETYKIETA : w wyniku ETYKIETA zastępuje nazwę pliku
-o, –only-matching : pokazanie tylko niepustych części linii, które pasują
-q, –quiet, –silent : wyłączenie wypisywania wyniku
–binary-files=TYP : założenie, że pliki binarne są typu TYP. TYP to „binary”, „text” lub „without-match”.
-a, –text : równoważne –binary-files=text
-I : równoważne –binary-files=without-match
-d, –directories=DZIAŁANIE : jak się obchodzić z katalogami, DZIAŁANIE to „read” (czytanie), „recurse” (przeglądanie rekurencujne) albo „skip” (pominięcie).
-D, –devices=DZIAŁANIE : jak odwoływać się do urządzeń, FIFO i gniazd, DZIAŁANIE to „read” (czytaj) albo „skip” (pomiń)
-r, –recursive : równoważne –directories=recurse
-R, –dereference-recursive : podobnie, ale z podążaniem za dowiązaniami symbolicznymi
–include=WZORZEC_PLIKOWY : przeszukiwane będą pliki pasujące do WZORCA_PLIKOWEGO
–exclude=WZORZEC_PLIKOWY : pliki pasujące do WZORCA_PLIKOWEGO będą pominięte
–exclude-from=PLIK : pominięcie plików pasujących do wzorców plikowych w PLIKU
–exclude-dir=WZORZEC_PLIKOWY : katalogi pasujące do WZORCA_PLIKOWEGO będą pominięte
-L, –files-without-match : wypisanie tylko nazw PLIKÓW bez wybranych linii
-l, –files-with-matches : wypisanie tylko nazw PLIKÓW z wybranymi liniami
-c, –count : wypisanie tylko liczby wybranych linii w każdym PLIKU
-T, –initial-tab : wyrównanie linii przez TAB (jeżeli potrzebne)
-Z, –null : wypisanie bajtu 0 po każdej nazwie PLIKU
Składnia
grep WZORZEC PLIK(I)
Przykłady
Wyszukaj słowo „linux” w pliku FILE1.txt
grep linux FILE1.txt
lub
grep "linux" FILE1.txt
Wyszukaj słowo linux w kilku plikach
grep linux FILE1.txt FILE2.txt FILE3.txt
Wyszukaj słowo „linux” w pliku w innym katalogu niż obecny
grep "linux" /sciezka/do/katalogu/FILE1.txt
Możesz użyć opcji –color, aby wyróżnić wyniki
grep --color "linux" FILE1.txt
Jeśli chcesz wyszukać ciąg znaków w bieżącym katalogu i we wszystkich innych podkatalogach, użyj flagi -r
grep -r linux
Aby zignorować rozróżnianie wielkości liter, użyj flagi -i
grep -i "linux" FILE1.txt
Aby policzyć całkowitą liczbę linii, w których pojawia lub znajduje się wzór ciągu, użyj opcji -c
grep -c "Linux" FILE1.txt
Aby wyświetlić tekst bez wzorca „Linux” użyj opcji -v
grep -v "Linux" FILE1.txt
Aby ponumerować wiersze, w których pasuje wzorzec ciągu, użyj opcji -n
grep -n "Linux" FILE1.txt
Użycie flagi -w spowoduje wyszukanie wiersza zawierającego dokładnie pasujące słowo
grep -w "SparkyLinux"
W tym przypadku wynikiem będzie tylko SparkyLinux.
Grep można również użyć w połączeniu z innymi aplikacjami.
Aby znaleźć zainstalowany pakiet, np. Firefox w dystrybucjach bazujących na Debianie
dpkg -L | grep firefox
Aby sprawdzić czy użytkownik pawel jest zarejestrowany w systemie:
cat /etc/passwd | grep pawel
Więcej informacji o programie grep uzyskasz poleceniami:
man grep
grep --help
Zapomniano o przydatnych: -A, -B itp.
Wg grep –help:
„Sterowanie kontekstem:
-B, –before-context=ILE wypisanie ILU linii kontekstu przed
-A, –after-context=ILE wypisanie ILU linii kontekstu po
-C, –context=ILE wypisanie ILU linii kontekstu
-ILE to samo co –context=ILE”
Dzięki