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)