Filtr grep

Transkrypt

Filtr grep
Linux
Filtr grep
Opracował: Arkadiusz Curulak
WSIiE TWP w Olsztynie
Data aktualizacji : 17-06-2002
Pierwsza edycja : 01-06-2002
Spis treści
Filtr grep: składnia ......................................................................................................
Zadanie 1 ............................................................................................................
Zadanie 2 ............................................................................................................
Zadanie 3 ............................................................................................................
Zadanie 4 ............................................................................................................
Zadanie 5 ............................................................................................................
Zadanie 6 ............................................................................................................
Zadanie 7 ............................................................................................................
Zadanie 8 ............................................................................................................
Zadanie 9 ............................................................................................................
Zadanie 10 ..........................................................................................................
Zadanie 11 ..........................................................................................................
Zadanie 12 ..........................................................................................................
Zadanie 13 ..........................................................................................................
Zadanie 14 ..........................................................................................................
Literatura .....................................................................................................................
2
2
3
3
3
4
4
5
5
6
6
6
6
6
7
7
Filtr grep
2
Filtr grep
Filtr grep poszukuje wzorca w treści plików lub standardowym wejściu.
Po wydaniu polecenia grep --help możemy zapoznać się ze jego składnią:
Usage: grep [OPTION]... PATTERN [FILE] ...
Jak widać grep przyjmuje dwa rodzaje argumentów (poza opcjami/parametrami):
• wzorzec poszukiwań (PATTERN),
• listę nazw plików, które mają być przeszukane (FILE).
Drugi argument jest opcjonalny. Jego brak oznacza, że źródłem danych jest
standardowe wejście.
Polecenie grep pozwala na korzystanie z wyrażeń regularnych do definiowania wzorca.
Do zaprezentowania działanie polecenia grep użyjemy pliku dane.dat, który będzie
zawierał następujące dane.
dane.dat
Gil Franciszek
Sowa Teodor
Bocian Lucjusz
Kawka Marcin
Pliszka Anna
Czapla Piotr
Puchacz Marcin
Mewa Alicja
Rybitwa Aleksandra
Bocian Hanna
Perkoz Franciszek
Kruk Marian
Zadanie 1
Wyświetl wszystkie wiersze zawierające literę p.
grep p dane.dat
Wynik :
Czapla Piotr
Polecenie grep nie wyświetliło innych wierszy, gdyż mała litera p występuje tylko
w jednym wierszu. Aby grep nie zwracał uwagi na wielkość liter, musimy użyć
parametru –i. Zatem ...
grep –i p dane.dat
Wynik :
Pliszka Anna
Czapla Piotr
Puchacz Marcin
Perkoz Franciszek
Filtr grep
3
Zadanie 2
Wyświetl wszystkie wiersze zawierające imię Marcin.
grep Marcin dane.dat
Wynik :
Kawka Marcin
Puchacz Marcin
Jeżeli chcemy, aby grep wyświetlał wiersz, które nie zawierają zadanego wzorca,
musimy posłużyć się parametrem –v. Oto przykład odwrotny do powyższego.
Zadanie 3
Wyświetl wszystkie wiersze, które nie zawierają imienia Marcin.
grep –v Marcin dane.dat
Wynik :
Gil Franciszek
Sowa Teodor
Bocian Lucjusz
Pliszka Anna
Czapla Piotr
Mewa Alicja
Rybitwa Aleksandra
Bocian Hanna
Perkoz Franciszek
Kruk Marian
Jeżeli wynik filtrowania chcesz uporządkować (posortować) alfabetycznie, możesz
posłużyć się poleceniem sort.
grep –v Marcin dane.dat | sort
Jeżeli często zdarza się, że poszukujemy tych samych wzorców w różnych plikach, np.
często sprawdzamy obecność kilku konkretnych osób w różnych listach, możemy
przygotować sobie listę takich wzorców (osób) w oddzielnym pliku. Parametr –f
sugeruje poleceniu grep skorzystania z takiego pliku z wzorcami. Sprawdźmy to.
Oto nasz plik wzorce wzorców (z nazwiskami):
dane.dat
Czapla
Mewa
Bocian
Zadanie 4
Wyświetl wiersze zawierające wzorce (nazwiska) znajdujące się w pliku wzorce.
grep –f wzorce dane.dat
Filtr grep
Wynik :
4
Bocian Lucjusz
Czapla Piotr
Mewa Alicja
Bocian Hanna
A co zobaczymy, gdy wydamy poniższe polecenie?
grep –v -f wzorce dane.dat
Jak widać, możemy łączyć ze sobą kilka parametrów.
Dodatkowo parametry występujące w poleceniu grep możemy zapisać w łącznie:
grep –vf wzorce dane.dat
Jeżeli interesuje nas jedynie liczba wystąpień wzorca w pliku (plikach), bez drukowania
pasujących wierszy, powinniśmy użyć parametru –c.
Zadanie 5
Ile razy w pliku dane.dat występuje nazwisko Bocian.
grep –c Bocian dane.dat
Wynik :
2
Informację o numerach wierszy, w których wystąpił wzorzec, uzyskamy za pomocą
parametru –n.
Zadanie 6
W jakich wierszach wystąpiło imię Marcin.
grep –n Marcin dane.dat
Wynik :
4:Kawka Marcin
7:Puchacz Marcin
Mechanizmem bardzo rozbudowującym możliwości polecenia grep są wyrażenia
regularne. Jest to bardzo obszerny temat i dlatego nie sposób jest omówić go w całości
w tym miejscu. Zainteresowanych odsyłam zatem do lektury [2].
Oto kilka ważniejszych metaznaków występujących w wyrażeniach regularnych:
Metaznak Znaczenie
.
dowolny pojedynczy znak
[...]
dowolny z wymienionych w nawiasie znaków
[^...]
dowolny z nie wymienionych w nawiasie znaków
^
miejsce (występuje) na początku wiersza
$
miejsce (występuje) na końcu wiersza
\<
miejsce (występuje) na początku słowa
\>
miejsce (występuje) na końcu słowa
Filtr grep
|
(...)
5
pasuje do dowolnego z rozdzielonych w ten sposób wyrażeń
służy m.in. do zawężenia zasięgu metaznaku |
Poniżej dla każdego metaznaku przedstawiam przykład. Wcześniej jednak muszę
wspomnieć, że korzystanie z wyrażeń regularnych wymaga w niektórych sytuacjach
użycia parametru –E. Możemy również zamiast grep –E używać skrótowo polecenia
egrep. W większości przypadków działać jednak będzie polecenie grep (bez –E).
Zadanie 7
Mam plik imiona.dat:
imiona.dat
ola
ala
hipolit
anna
olga
alicja
ludwik
ewa
arek
Wydrukuj wszystkie imiona, które składają się z co najmniej 4 znaków.
lub
lub
grep –E ′....′ imiona.dat
egrep ′....′ imiona.dat
grep .... imiona.dat
Wynik :
hipolit
anna
olga
alicja
ludwik
arek
W kolejnych przykładach używał będę tylko jednej z możliwości – najczęściej tej
najkrótszej.
Zadanie 8
Wydrukuj wszystkie imiona, w których występuje jeden z łańcuchów: al, ar, ol lub or.
grep [ao][lr] imiona.dat
Wynik :
ola
ala
hipolit
olga
alicja
arek
Filtr grep
6
Zadanie 9
Wydrukuj wszystkie imiona, w których występuje łańcuch składający się z litery a i po
niej litery różnej od l i n.
grep a[^ln] imiona.dat
Wynik :
arek
Zadanie 10
Wyświetl wszystkie wiersze rozpoczynające się łańcuchem ol.
grep ^ol imiona.dat
Wynik :
ola
olga
Zadanie 11
Wyświetl wszystkie imiona żeńskie (kończące się literą a).
grep a$ imiona.dat
Wynik :
ola
ala
anna
olga
alicja
ewa
Mamy plik adresy:
adresy
Jan Kowalski, Olsztyn, ul. Okrzei 5
Adam Pestka, Jonkowo, ul. Prosta 33, [email protected]
Dawid Kujka, Olsztynek, ul. Dolna 2
Maria Ryba, Warszawa, ul. Grzybowa 3/5
Piotr Kaktus, Olsztyn, ul. Kawki 21a, [email protected]
Filip Bocian, Gdynia, ul. Helska 1, [email protected]
Danuta Fiofik, Szczecin, ul. Pomorska 8/2
Zadanie 12
Wydrukuj wszystkich zamieszkałych w Olsztynie.
grep –E ′\<Olsztyn\>′ adresy
Wynik :
Jan Kowalski, Olsztyn, ul. Okrzei 5
Piotr Kaktus, Olsztyn, ul. Kawki 21a, [email protected]
Zadanie 13
Wydrukuj wszystkich zamieszkałych w Olsztynie lub Jonkowie.
grep –E ′\<(Olsztyn|Jonkowo)\>′ adresy
Filtr grep
Wynik :
7
Jan Kowalski, Olsztyn, ul. Okrzei 5
Adam Pestka, Jonkowo, ul. Prosta 33, [email protected]
Piotr Kaktus, Olsztyn, ul. Kawki 21a, [email protected]
Zadanie 14
Wyświetl wszystkich, którzy mają adresy e-mail.
egrep ′\w+\@\w+(\.\w+)+′ adresy
Wynik :
Adam Pestka, Jonkowo, ul. Prosta 33, [email protected]
Piotr Kaktus, Olsztyn, ul. Kawki 21a, [email protected]
Filip Bocian, Gdynia, ul. Helska 1, [email protected]
Kilka wyjaśnień.
•
•
•
zapis \. oznacza znak kropki, a nie dowolny znak (\@ to znak @),
\w to znak będący częścią słowa, np. litera, cyfra czy znak podkreślenia,
+ oznacza co najmniej jeden znak, pozostałe są opcjonalne (zatem \w+ oznacza
kilka znaków będących częścią słowa).
Literatura
[1] Petersen R., Arkana Linux, Wydawnictwo RM, Warszawa 1997
[2] Friedl J., Wrażenia regularne, Helion, Gliwice 2001
[3] grep.1.gz (man grep)