Imię Grep Pochodzi z polecenia ED (i VIM) „g/re/p”, co oznacza globalne wyszukiwanie danego wyrażenia regularnego i drukowania (wyświetlania) wyjścia.
Regularny Wyrażenia
Narzędzia umożliwiają użytkownikowi wyszukiwanie plików tekstowych w poszukiwaniu linii pasujących do wyrażenia regularnego (Regexp). Wyrażenie regularne to ciąg wyszukiwania złożony z tekstu i jeden lub więcej z 11 znaków specjalnych. Prostym przykładem jest dopasowanie początku linii.
Przykładowy plik
Podstawowa forma Grep może być używane do znalezienia prostego tekstu w określonym pliku lub plikach. Aby wypróbować przykłady, najpierw utwórz przykładowy plik.
Użyj edytora, takiego jak Nano lub VIM, aby skopiować poniższy tekst do pliku o nazwie mój plik.
XYZ
Xyzde
Exyzd
Dexyz
D?gxyz
xxz
xzz
x \ z
x*z
xz
x z
XYZ
Xyyz
XYZ
xyyz
Xyyyz
Xyyyyz
Chociaż możesz kopiować i wkleić przykłady w tekście (pamiętaj, że podwójne cytaty mogą nie kopiować poprawnie), należy wpisać polecenia, aby ich prawidłowo się nauczyć.
Przed wypróbowaniem przykładów wyświetl przykładowy plik:
Cat myfileXYZ
Proste wyszukiwanie
Aby znaleźć tekst „XYZ” w pliku, uruchom następujące:
Grep Xyz MyfileXYZ
Opcje
Typowe opcje używane z Grep Polecenie obejmuje:
Na przykład:
grep -i xyz myfileXYZ
# Znajdź tekst niezależnie od przypadku
grep -ic xyz myfile7
# Linie liczą z tekstem
grep -in xyz myfile1: XYZ
# Pokaż numery linii
Utwórz wiele plików
Przed próbą wyszukiwania wielu plików najpierw utwórz kilka nowych plików:
echo xyz> myfile1XYZ
Cat myfile1
echo -e 'xyz \ nxzz \ nxyz'> myfile2XYZ
Cat myfile2
echo -e 'xxx \ nyyy'> myfile3xxx
Cat myfile3
Wyszukaj wiele plików
Aby wyszukiwać wiele plików za pomocą nazwy plików lub Enter do Wildcard:
grep -ic xyz myfile myfile1 myfile2 myfile3Myfile: 7
# Dopasuj nazwy plików zaczynające się od „my”myfile: 1: xyz
grep -in xyz my*
Ćwiczenie
Wskazówka: użyj WC -L /etc /Passwd
Rozwiązania ćwiczeń można znaleźć na końcu tego artykułu.
Korzystanie z wyrażeń regularnych
Komenda Grep może być również używane z wyrażeniami regularnymi przy użyciu jednego lub więcej jedenastu znaków specjalnych lub symboli do udoskonalenia wyszukiwania. Wyrażenie regularne to ciąg znaków, który zawiera znaki specjalne, aby umożliwić dopasowywanie wzorców w narzędzia, takie jak Grep, krzepa I sed. Zauważ, że sznurki mogą wymagać zamknięcia w cytatach.
Dostępne znaki specjalne obejmują:
^ | Początek linii |
$ | Koniec linii |
. | Każda postać (z wyjątkiem nowej linii) |
* | 0 lub więcej poprzedniego wyrażenia |
\ | Poprzedzający symbol czyni go dosłownym postacią |
Zauważ, że *, które mogą być używane w wierszu poleceń w celu dopasowania dowolnej liczby znaków, w tym Brak, jest nie używane w ten sam sposób tutaj.
Zwróć również uwagę na użycie cytatów w następujących przykładach.
Przykłady
Aby znaleźć wszystkie wiersze zaczynające się od tekstu za pomocą postaci ^:
grep '^xyz' myfile
Aby znaleźć wszystkie wiersze kończące się tekstem za pomocą znaku $:
grep „xyz $” myfile
Aby znaleźć linie zawierające ciąg przy użyciu znaków ^ i $:
grep '^xyz $' myfile
Aby znaleźć linie za pomocą . Aby dopasować dowolną postać:
grep '^x.Z 'myfile
Aby znaleźć linie za pomocą * do dopasowania 0 lub więcej poprzedniego wyrażenia:
grep '^xy*z' myfile
Aby znaleźć linie za pomocą .* Aby dopasować 0 lub więcej dowolnej postaci:
grep '^x.*Z 'myfile
Aby znaleźć linie za pomocą \ Unikać * postaci:
grep '^x \*z' myfile
Aby znaleźć użycie postaci:
grep „\\” myfile
Wyrażenie grep - egrep
Grep Polecenie obsługuje tylko podzbiór dostępnych wyrażeń regularnych. Jednak polecenie Egrep:
Zauważ, że wyrażenia muszą być zamknięte w parach cytatów.
Aby poszukać więcej niż jednego Regex Egrep Polecenie może być zapisane w wielu wierszach. Można to jednak również zrobić za pomocą tych znaków specjalnych:
| | Naprzemiennie, jedna lub druga |
(…) | Logiczne grupowanie części wyrażenia |
egrep '(^root |^uucp |^Mail)' /etc /passwd
To wyodrębnia linie, które zaczynają się od korzenia, uucp lub poczty z pliku, | symbol oznacza jedną z opcji.
Następujące polecenie będzie nie praca, chociaż nie wyświetlana jest żadna wiadomość, ponieważ podstawowy Grep Polecenie nie obsługuje wszystkich wyrażeń regularnych:
grep '(^root |^uucp |^maila)' /etc /passwd
Jednak w większości systemów Linux polecenie grep -e jest to samo, co używanie Egrep:
grep -e '(^root |^uucp |^Mail)' /etc /passwd
Za pomocą filtrów
Rurociąg to proces wysyłania wyjścia jednego polecenia jako wejścia do innego polecenia i jest jednym z najpotężniejszych dostępnych narzędzi Linux.
Polecenia, które pojawiają się w rurociągu, są często określane jako filtry, ponieważ w wielu przypadkach przesiadają lub modyfikują dane wejściowe przed wysłaniem zmodyfikowanego strumienia na standardowe wyjście.
W poniższym przykładzie standardowe wyjście z ls -l jest przekazywany jako standardowy wejście do Grep Komenda. Wyjście z Grep Polecenie jest następnie przekazywane jako dane wejściowe do więcej Komenda.
To wyświetli tylko katalogi w /itp:
ls -l /etc | grep '^d' | więcej
Poniższe polecenia są przykładami używania filtrów:
ps -ef | grep cron
kto | grep kdm
Przykładowy plik
Aby spróbować ćwiczenia przeglądu, najpierw utwórz następujący przykładowy plik.
Użyj edytora, takiego jak Nano lub VIM, aby skopiować poniższy tekst do pliku o nazwie ludzie:
Personal J.Smith 25000
Osobisty e.Smith 25400
Szkolenie a.Brown 27500
Szkolenie c.Browen 23400
(Admin) r.Bron 30500
Towar t.Smyth 30000
Osobisty f.Jones 25000
Szkolenie* c.Evans 25500
Towar w.Papież 30400
Płaszcz t.Smythe 30500
Personal J.Maler 33000
Ćwiczenie II
Rozwiązania ćwiczeń można znaleźć na końcu tego artykułu.
Więcej wyrażeń regularnych
Wyrażenie regularne można traktować jako dzikie karty na sterydach.
Istnieje jedenaście znaków ze specjalnymi znaczeniami: otwierające i zamykające kwadratowe nawiasy [], backslash \, CareT ^, znak dolara $, okres lub kropka ., Pionowy pasek lub symbol rurowy |, znak zapytania ?, gwiazdka lub gwiazda *, znak plus + oraz okrągły wspornik otwierający i zamykający . Te znaki specjalne są również często nazywane Metacharacters.
Oto pełny zestaw znaków specjalnych:
^ | Początek linii |
$ | Koniec linii |
. | Każda postać (z wyjątkiem nowej linii) |
* | 0 lub więcej poprzedniego wyrażenia |
| | Naprzemiennie, jedna lub druga |
[…] | Wyraźny zestaw postaci do dopasowania |
+ | 1 lub więcej poprzednich wyrażeń |
? | 0 lub 1 poprzedniego wyrażenia |
\ | Poprzedzający symbol czyni go dosłownym postacią |
… | Wyraźne zapis kwantyfikatorów |
(…) | Logiczne grupowanie części wyrażenia |
Domyślna wersja Grep ma jedynie ograniczone wsparcie wyrażeń regularnych. Aby wszystkie następujące przykłady działały, użyj Egrep zamiast tego lub grep -e.
Aby znaleźć linie za pomocą | Aby dopasować dowolne wyrażenie:
egrep 'xxz | xzz' myfile
Aby znaleźć linie za pomocą | Aby dopasować dowolne wyrażenie w ciągu ciągu, również użyj ():
egrep '^x (yz | yz)' myfile
Aby znaleźć linie za pomocą [] do dopasowania dowolnej postaci:
egrep '^x [yy] z' myfile
Aby znaleźć linie za pomocą [], aby nie pasować do żadnego znaku:
egrep '^x [^yy] z' myfile
Aby znaleźć linie za pomocą * do dopasowania 0 lub więcej poprzedniego wyrażenia:
egrep '^xy*z' myfile
Aby znaleźć linie za pomocą + do dopasowania 1 lub więcej poprzedniego wyrażenia:
egrep '^xy+z' myfile
Aby znaleźć linie za pomocą ? Aby dopasować 0 lub 1 poprzedniego wyrażenia:
egrep '^xy?Z 'myfile
Ćwiczenie III
Więcej przykładów
Aby znaleźć linie za pomocą . i * Aby dopasować dowolny zestaw postaci:
egrep '^xy.*Z 'myfile
Aby znaleźć linie za pomocą do dopasowania N liczby znaków:
egrep '^xy 3 z' myfile
egrep '^xy 4 z' myfile
Aby znaleźć linie za pomocą do dopasowania N lub więcej razy:
egrep '^xy 3, z' myfile
Aby znaleźć linie za pomocą , aby dopasować N razy, ale nie więcej niż M razy:
egrep '^xy 2,3 z' myfile
Wniosek
W tym samouczku najpierw przyjrzeliśmy się użyciu Grep w prostej formie znalezienie tekstu w pliku lub w wielu plikach. Następnie połączyliśmy tekst do wyszukiwania z prostymi wyrażeniami regularnymi, a następnie bardziej złożonymi za pomocą Egrep.
Następne kroki
Mam nadzieję, że dobrze wykorzystasz wiedzę. Spróbować Grep Polecenia na własnych danych i pamiętaj, wyrażenia regularne opisane tutaj mogą być używane w tej samej formie w vi, sed I Awk!
Rozwiązania ćwiczeń
Ćwiczenie
Najpierw policz liczbę linii w pliku /etc/passwd.
wc -l /etc /passwd
Teraz znajdź wszystkie wystąpienia tekstu var w pliku /etc /passwd.
grep var /etc /passwd
Znajdź liczbę linii w pliku zawiera tekst var
grep -c var /etc /passwd
Znajdź, ile wierszy nie zawiera tekstu var.
grep -cv var /etc /passwd
Znajdź wpis do logowania w /etc/passwd plik
grep kdm /etc /passwd
Ćwiczenie II
Wyświetl plik ludzie i sprawdź jego zawartość.
Kat
Znajdź wszystkie wiersze zawierające ciąg Kowal w pliku ludzie.
Grep „Smith” ludzie
Utwórz nowy plik, Npeople, zawierające wszystkie wiersze zaczynające się od ciągu Osobisty w ludzie plik
grep '^osobisty' ludzie> npeople
Potwierdź zawartość pliku Npeople Wymieniając plik.
Kot Npeople
Teraz dołącz wszystkie wiersze, w których tekst kończy się łańcuchem 500 w pliku ludzie do pliku Npeople.
grep '500 $' ludzi >> npeople
Ponownie potwierdź zawartość pliku Npeople Wymieniając plik.
Kot Npeople
Znajdź adres IP serwera, który jest przechowywany w pliku /etc/hosts.
grep $ (nazwa hosta) /etc /hosts
Używać Egrep wyodrębnić z /etc/passwd Linie konta pliku zawierające LP lub twój własny identyfikator użytkownika.
egrep '(lp | kdm :)' /etc /passwd
Ćwiczenie III
Znajdź wszystkie wiersze zawierające nazwy Evans Lub Maler w pliku ludzie.
Egrep „Evans | Maler” ludzie
Znajdź wszystkie wiersze zawierające nazwy Kowal, Smyth Lub Smythe w pliku ludzie.
egrep 'sm (i | y)?' ludzie
Znajdź wszystkie wiersze zawierające nazwy brązowy, Browen Lub Bron w pliku ludzie.
Egrep 'Brow?mi?n 'ludzie
Znajdź linię zawierającą ciąg (Admin), w tym wsporniki, w pliku ludzie.
$ egrep '\ (admin \)' ludzie
Znajdź linię zawierającą znak * w pliku ludzie.
egrep „\*”
Połącz 5 i 6 powyżej, aby znaleźć oba wyrażenia.
egrep '\ (admin \) | \*' ludzie