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... 2 Zadanie 1... 2 Zadanie 2... 3 Zadanie 3... 3 Zadanie 4... 3 Zadanie 5... 4 Zadanie 6... 4 Zadanie 7... 5 Zadanie 8... 5 Zadanie 9... 6 Zadanie 10... 6 Zadanie 11... 6 Zadanie 12... 6 Zadanie 13... 6 Zadanie 14... 7 Literatura... 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 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 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 Pliszka Anna Puchacz Marcin Perkoz Franciszek
Filtr grep 3 Zadanie 2 Wyświetl wszystkie wiersze zawierające imię Marcin. grep Marcin dane.dat 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 Gil Franciszek Sowa Teodor Bocian Lucjusz Pliszka Anna 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 4 Bocian Lucjusz 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 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 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 ala hipolit anna ludwik ewa 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 hipolit anna ludwik 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 ala hipolit
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 Zadanie 10 Wyświetl wszystkie wiersze rozpoczynające się łańcuchem ol. grep ^ol imiona.dat Zadanie 11 Wyświetl wszystkie imiona żeńskie (kończące się literą a). grep a$ imiona.dat ala anna ewa Mamy plik adresy: adresy Jan Kowalski, Olsztyn, ul. Okrzei 5 Adam Pestka, Jonkowo, ul. Prosta 33, apestka@eh2.pl Dawid Kujka, Olsztynek, ul. Dolna 2 Maria Ryba, Warszawa, ul. Grzybowa 3/5 Filip Bocian, Gdynia, ul. Helska 1, fifi_23@epoczta.pl Danuta Fiofik, Szczecin, ul. Pomorska 8/2 Zadanie 12 Wydrukuj wszystkich zamieszkałych w Olsztynie. grep E \<Olsztyn\> adresy Jan Kowalski, Olsztyn, ul. Okrzei 5 Zadanie 13 Wydrukuj wszystkich zamieszkałych w Olsztynie lub Jonkowie. grep E \<(Olsztyn Jonkowo)\> adresy
Filtr grep 7 Jan Kowalski, Olsztyn, ul. Okrzei 5 Adam Pestka, Jonkowo, ul. Prosta 33, apestka@eh2.pl Zadanie 14 Wyświetl wszystkich, którzy mają adresy e-mail. egrep \w+\@\w+(\.\w+)+ adresy Adam Pestka, Jonkowo, ul. Prosta 33, apestka@eh2.pl Filip Bocian, Gdynia, ul. Helska 1, fifi_23@epoczta.pl 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)