Linux Professional Institute Learning Logo.
Przejdź do głównej treści
  • Strona Główna
    • Wszystkie Zasoby
    • Materiały Dydaktyczne LPI
    • Zostań Współautorem
    • Partnerzy Wydawniczy
    • Zostań Partnerem Wydawniczym
    • FAQ
    • Współautorzy
    • Harmonogram
    • Kontakt
  • LPI.org
3.2 Lekcja 2
Temat 1: Społeczność Linuxa i kariera w środowisku Open Source
1.1 Ewolucja Linuksa i popularne systemy operacyjne
  • Wkrótce...
1.2 Najważniejsze aplikacje Open Source
  • 1.2 Lekcja 1
1.3 Oprogramowanie i licencje typu open source
  • 1.3 Lekcja 1
1.4 Umiejętności ICT i praca w systemie Linux
  • 1.4 Lekcja 1
Temat 2: Poruszanie się po systemie Linux
2.1 Podstawy wiersza poleceń
  • 2.1 Lekcja 1
  • 2.1 Lekcja 2
2.2 Korzystanie z wiersza poleceń w celu uzyskania pomocy
  • 2.2 Lekcja 1
2.3 Korzystanie z katalogów i listy plików
  • 2.3 Lekcja 1
  • 2.3 Lekcja 2
2.4 Tworzenie, przenoszenie i usuwanie plików
  • 2.4 Lekcja 1
Temat 3: Siła wiersza poleceń
3.1 Archiwizacja plików za pomocą wiersza poleceń
  • 3.1 Lekcja 1
3.2 Wyszukiwanie i wyodrębnianie danych z plików
  • 3.2 Lekcja 1
  • 3.2 Lekcja 2
3.3 Przekształcanie poleceń w skrypt
  • 3.3 Lekcja 1
  • 3.3 Lekcja 2
Temat 4: System operacyjny Linux
4.1 Wybór systemu operacyjnego
  • Wkrótce...
4.2 Zrozumienie sprzętu komputerowego
  • 4.2 Lekcja 1
4.3 Gdzie są przechowywane dane
  • 4.3 Lekcja 1
  • 4.3 Lekcja 2
4.4 Komputer w sieci
  • 4.4 Lekcja 1
Temat 5: Bezpieczeństwo i uprawnienia do plików
5.1 Podstawy bezpieczeństwa i identyfikacja typów użytkowników
  • 5.1 Lekcja 1
5.2 Tworzenie użytkowników i grup
  • 5.2 Lekcja 1
5.3 Zarządzanie uprawnieniami do plików i prawami własności plików
  • 5.3 Lekcja 1
5.4 Katalogi i pliki specjalne
  • 5.4 Lekcja 1
How to get certified
  1. Temat 3: Siła wiersza poleceń
  2. 3.2 Wyszukiwanie i wyodrębnianie danych z plików
  3. 3.2 Lekcja 2

3.2 Lekcja 2

Certifikat:

Linux Essentials

Wersja:

1.6

Temat:

3 Siła wiersza poleceń

Cel nauki:

3.2 Wyszukiwanie i wyodrębnianie danych z plików

Lekcja:

2 z 2

Wstęp

W tej lekcji przyjrzymy się narzędziom używanym do wyszukiwania danych tekstowych. Narzędzia te są często używane przez administratorów systemu lub programy do automatycznego sprawdzania lub identyfikowania określonych powtarzających się informacji.

Wyszukiwanie w plikach za pomocą polecenia grep

Pierwszym narzędziem, które omówimy w tej lekcji, jest polecenie grep. Nazwa grep jest skrótem od “global regular expression print”, a jego główną funkcją jest wyszukiwanie tekstu w plikach pod kątem określonego wzorca. Polecenie wyświetla wiersz zawierający określony wzorzec (często podświetlony na czerwono).

$ grep bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
user:x:1001:1001:User,,,,:/home/user:/bin/bash

Podobnie jak większość poleceń, grep można stosować z różnymi opcjami. Oto najpopularniejsze z nich:

-i

podczas wyszukiwania nie jest rozróżniana wielkość liter,

-r

wyszukiwanie jest rekurencyjne (przeszukuje wszystkie pliki w określonym katalogu i jego podkatalogach),

-c

wyszukiwanie liczy liczbę dopasowań,

-v

wyszukiwanie odwraca dopasowanie i zwraca wiersze, które nie pasują do wyszukiwanego terminu.,

-E

wyszukiwanie włącza rozszerzone wyrażenia regularne (wymagane przez niektóre bardziej zaawansowane meta-znaki, takie jak | , + oraz ?).

Polecenie grep ma również wiele innych przydatnych opcji. Zajrzyj na stronę podręcznika, aby dowiedzieć się więcej na ten temat.

Wyrażenia regularne

Kolejne narzędzie ma ogromne możliwości i służy do opisywania fragmentów tekstu w plikach, zwanych także wyrażeniami regularnymi. Wyrażenia regularne są niezwykle przydatne podczas wyodrębniania danych z plików tekstowych poprzez określanie wzorców. Są często używane w skryptach lub podczas programowania w językach wyższego poziomu, takich jak Perl lub Python.

Podczas pracy z wyrażeniami regularnymi bardzo ważne jest, aby pamiętać, że ważny jest każdy znak, a wzorzec jest napisany w celu dopasowania określonej sekwencji znaków, zwanej ciągiem znaków. Większość wzorców używa zwykłych znaków ASCII, takich jak litery, cyfry, znaki interpunkcyjne lub inne symbole. Jednakże wzorce mogą również używać znaków Unicode w celu dopasowania dowolnego innego typu tekstu.

Poniższa lista zawiera opis metaznaków wyrażeń regularnych, które są używane do tworzenia wzorca:

.

Dopasuj dowolny pojedynczy znak (z wyjątkiem znaku nowej linii)

[abcABC]

Dopasuj dowolny znak w nawiasach

[^abcABC]

Dopasuj dowolny znak oprócz znaków w nawiasach

[a-z]

Dopasuj dowolny znak z określonego zakresu znaków

[^a-z]

Dopasuj dowolny znak z wyjątkiem znaków z określonego zakresu

sun|moon

Znajdź jeden z wymienionych ciągów

^

Początek wiersza

$

Koniec wiersza

Wszystkie funkcjonalności wyrażeń regularnych można również zaimplementować za pomocą polecenia grep. Jak widać w powyższym przykładzie, słowo nie jest ujęte w podwójne cudzysłowy. Aby zapobiec interpretacji samego meta-znaku przez powłokę zaleca się, aby bardziej złożony wzorzec znajdował się pomiędzy podwójnymi cudzysłowami (" "). Dla celów praktycznych będziemy używać podwójnych cudzysłowów podczas implementowania wyrażeń regularnych. Pozostałe cudzysłowy zachowują swoją normalną funkcjonalność, jak to wyjaśniono w poprzednich lekcjach.

Poniższe przykłady pokazują funkcjonalność wyrażeń regularnych. Będziemy potrzebować danych w pliku, dlatego następny zestaw poleceń po prostu dodaje różne ciągi do pliku text.txt.

$ echo "aaabbb1" > text.txt
$ echo "abab2" >> text.txt
$ echo "noone2" >> text.txt
$ echo "class1" >> text.txt
$ echo "alien2" >> text.txt
$ cat text.txt
aaabbb1
abab2
noone2
class1
alien2

Pierwszy przykład to połączenie wyszukiwania pliku z wyrażeniami regularnymi lub bez nich. Aby w pełni zrozumieć wyrażenia regularne, bardzo ważne jest poznanie różnicy pomiędzy nimi. Pierwsze polecenie wyszukuje dokładny ciąg znaków w dowolnym miejscu w wierszu, natomiast drugie polecenie wyszukuje ciągi znaków zawierające dowolny ze znaków, które są umieszczone w nawiasach kwadratowych. Dlatego wyniki poleceń są różne.

$ grep "ab" text.txt
aaabbb1
abab2
$ grep "[ab]" text.txt
aaabbb1
abab2
class1
alien2

Kolejne przykłady pokazują zastosowanie meta-znaków na początku i na końcu linii. Bardzo ważne jest, aby oba znaki zostały umieszczone we właściwych miejscach w wyrażeniu. Podczas określania początku wiersza meta-znak musi znajdować się przed wyrażeniem, natomiast podczas określania końca wiersza meta-znak musi występować po wyrażeniu.

$ grep "^a" text.txt
aaabbb1
abab2
alien2
$ grep "2$" text.txt
abab2
noone2
alien2

Oprócz meta-znaków opisanych powyżej, wyrażenia regularne mają również inne metaznaki, które umożliwiają powtarzanie wcześniej określonego wzorca:

*

Zero lub więcej wystąpień poprzedniego wzorca

+

Jedno lub więcej wystąpień poprzedniego wzorca

?

Zero lub jedno wystąpienie poprzedniego wzorca

Jako przykład wielu meta-znaków, poniższe polecenie wyszukuje ciąg znaków zawierający ab, pojedynczy znak i jeden lub więcej znaków znalezionych wcześniej. Wynik pokazuje, że polecenie grep znalazło ciąg znaków aaabbb1, który pasuje zarówno do części abbb, jak i do abab2. Ponieważ znak + jest rozszerzonym znakiem wyrażenia regularnego, musimy polecenie grep zastosować z opcją -E.

$ grep -E "ab.+" text.txt
aaabbb1
abab2

Większość meta-znaków jest oczywistych i nie wymaga objaśnień, ale ich pierwsze użycie może sprawiać trudność. Poprzednie przykłady pokazują niewielką część funkcjonalności wyrażeń regularnych. Wypróbuj każdy z powyższych meta-znaków, aby dowiedzieć się więcej o ich działaniu.

Ćwiczenia z przewodnikiem

Używając grep oraz pliku /usr/share/hunspell/en_US.dic, znajdź wiersze spełniające następujące kryteria: . Wszystkie wiersze zawierające słowo cat w dowolnym miejscu w wierszu.

+

  1. Wszystkie wiersze, które nie zawierają żadnego z następujących znaków: sawgtfixk.

  2. Wszystkie wiersze zaczynające się od 3 dowolnych liter i słowa dig.

  3. Wszystkie wiersze kończące się co najmniej jedną literą e.

  4. Wszystkie wiersze zawierające jeden z następujących ciągów znaków: org, kay lub tuna.

  5. Liczbę wierszy zaczynających się od litery c lub nie, po których następuje ciąg znaków ati.

Ćwiczenia eksploracyjne

  1. Znajdź wyrażenie regularne, które pasuje do słów w wierszu “Include” (“Zawierają”) i nie pasuje do słów w wierszu “Exclude” (“Wyklucz”):

    • Zawierają: pot, spot, apot

      Wykluczają: potic, spots, potatoe

    • Zawierają: arp99, apple, zipper

      Wykluczają: zoo, arive, attack

    • Zawierają: arcane, capper, zoology

      Wykluczają: air, coper, zoloc

    • Zawierają: 0th/pt, 3th/tc, 9th/pt

      Wykluczają: 0/nm, 3/nm, 9/nm

    • Zawierają: Hawaii, Dario, Ramiro

      Wykluczają: hawaii, Ian, Alice

  2. Jakie inne przydatne polecenie jest często używane do wyszukiwania w plikach? Jakie ma dodatkowe funkcje?

  3. Weź przykład z poprzedniej lekcji, skorzystaj z jednego z przykładów i spróbuj znaleźć określony wzorzec w danych wyjściowych polecenia, korzystając z polecenia grep.

Podsumowanie

W tym laboratorium nauczyłeś się:

  • Rozróżniać wyrażenia regularne i metaznaki.

  • Jak tworzyć wzorce za pomocą wyrażeń regularnych

  • Jak wyszukiwać w plikach

Komendy wykorzystywane w ćwiczeniach:

grep

Wyszukuje znaki lub ciągi znaków w pliku

Odpowiedzi do ćwiczeń z przewodnikiem

Używając grep oraz pliku /usr/share/hunspell/en_US.dic, znajdź wiersze spełniające następujące kryteria: . Wszystkie wiersze zawierające słowo cat w dowolnym miejscu w wierszu.

+

$ grep "cat" /usr/share/hunspell/en_US.dic
Alcatraz/M
Decatur/M
Hecate/M
...
  1. Wszystkie wiersze, które nie zawierają żadnego z następujących znaków: sawgtfixk.

    $ grep -v "[sawgtfixk]" /usr/share/hunspell/en_US.dic
    49269
    0/nm
    1/n1
    2/nm
    2nd/p
    3/nm
    3rd/p
    4/nm
    5/nm
    6/nm
    7/nm
    8/nm
    ...
  2. Wszystkie wiersze zaczynające się od 3 dowolnych liter i słowa dig.

    $ grep "^...dig" /usr/share/hunspell/en_US.dic
    cardigan/SM
    condign
    predigest/GDS
    ...
  3. Wszystkie wiersze kończące się co najmniej jedną literą e.

    $ grep -E "e+$" /usr/share/hunspell/en_US.dic
    Anglicize
    Anglophobe
    Anthropocene
    ...
  4. Wszystkie wiersze zawierające jeden z następujących ciągów znaków: org, kay lub tuna.

    $ grep -E "org|kay|tuna" /usr/share/hunspell/en_US.dic
    Borg/SM
    George/MS
    Tokay/M
    fortunate/UY
    ...
  5. Liczbę wierszy zaczynających się od litery c lub nie, po których następuje ciąg znaków ati.

    $ grep -cE "^c?ati" /usr/share/hunspell/en_US.dic
    3

Odpowiedzi do ćwiczeń eksploracyjnych

  1. Znajdź wyrażenie regularne, które pasuje do słów w wierszu “Include” (“Zawierają”) i nie pasuje do słów w wierszu “Exclude” (“Wyklucz”):

    • Zawierają: pot, spot, apot

      Wykluczają: potic, spots, potatoe

      Rozwiązanie: pot$

    • Zawierają: arp99, apple, zipper

      Wykluczają: zoo, arive, attack

      Rozwiązanie: p+

    • Zawierają: arcane, capper, zoology

      Wykluczają: air, coper, zoloc

      Rozwiązanie: arc|cap|zoo

    • Zawierają: 0th/pt, 3th/tc, 9th/pt

      Wykluczają: 0/nm, 3/nm, 9/nm

      Rozwiązanie: [0-9]th.+

    • Zawierają: Hawaii, Dario, Ramiro

      Wykluczają: hawaii, Ian, Alice

      Rozwiązanie: ^[A-Z]a.*i+

  2. Jakie inne przydatne polecenie jest często używane do wyszukiwania w plikach? Jakie ma dodatkowe funkcje?

    Jest to polecenie sed. Potrafi ono znaleźć i zamienić znaki lub ciągi znaków w pliku.

  3. Weź przykład z poprzedniej lekcji, skorzystaj z jednego z przykładów i spróbuj znaleźć określony wzorzec w danych wyjściowych polecenia, korzystając z polecenia grep.

    Została wybrana jedna z odpowiedzi z ćwiczeń eksploracyjnych, a nastepnie szukano wiersza, który ma uprawnienia do odczytu, zapisu i wykonywania, zgodnie z uprawnieniami grupy. Twoja odpowiedź może być inna, w zależności od wybranego polecenia i utworzonego wzoru.

    $ cat contents.txt | tr -s " " | grep "^....rwx"

    Celem tego ćwiczenia było pokazanie, że polecenie grep może również otrzymywać dane wejściowe z różnych poleceń i może pomóc w filtrowaniu wygenerowanych informacji.

Linux Professional Insitute Inc. Wszelkie prawa zastrzeżone. Odwiedź stronę Learning Materials: https://learning.lpi.org
Dzieło jest udostępnione na licencji Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

Następna lekcja

3.3 Przekształcanie poleceń w skrypt (3.3 Lekcja 1)

Przeczytaj następną lekcję

Linux Professional Insitute Inc. Wszelkie prawa zastrzeżone. Odwiedź stronę Learning Materials: https://learning.lpi.org
Dzieło jest udostępnione na licencji Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

LPI jest organizacją non-profit.

© 2022 Linux Professional Institute (LPI) jest światowym standardem certyfikacji i organizacją wspierającą karierę profesjonalistów open source. Posiadając ponad 200 000 certyfikatów, LPI jest pierwszą i największą na świecie neutralną w stosunku do dostawców jednostką certyfikującą Linuksa i open source. LPI certyfikuje profesjonalistów w ponad 180 krajach, przeprowadza egzaminy w wielu językach i posiada setki partnerów szkoleniowych.

Naszym celem jest stworzenie ekonomicznych i kreatywnych możliwości dla każdego poprzez powszechny dostęp do wiedzy i umiejętności open source.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Skontaktuj się z nami
  • Polityka prywatności i plików cookiey

Zauważyłeś błąd lub chcesz pomóc ulepszyć tę stronę? Prosimy daj nam znać.

© 1999–2022 The Linux Professional Institute Inc. Wszelkie prawa zastrzeżone.