grep

Znajdowanie ciągów w plikach tekstowych za pomocą grep z wyrażeniem regularnym

Znajdowanie ciągów w plikach tekstowych za pomocą grep z wyrażeniem regularnym
grep to jedno z najpopularniejszych narzędzi do wyszukiwania i znajdowania ciągów w pliku tekstowym. Nazwa 'grep' pochodzi od polecenia w przestarzałym edytorze linii Unix ed - polecenie ed do wyszukiwania globalnie poprzez plik dla Wyrażenie regularne i wtedy druk te linie były g/re/p, gdzie było wyrażenie regularne, którego byś użył?. Ostatecznie polecenie grep zostało napisane, aby wykonać to wyszukiwanie w pliku, gdy nie używasz ed.

W tym artykule pokazujemy, jak uruchomić zaawansowane wyszukiwanie ciągów za pomocą Grepa z wyrażeniem regularnym, podając 10 praktycznych przykładów jego implementacji. Wiele przykładów omówionych w tym artykule ma praktyczne implikacje, co oznacza, że ​​możesz ich używać w codziennym programowaniu w Linuksie. Poniższe przykłady opisują kilka przykładów wyrażeń regularnych dla często wyszukiwanych wzorców.

Przykład 1: Znajdź pojedynczego czarterującego w pliku tekstowym

Aby wyprowadzić w pliku 'book' wiersze zawierające znak '$', wpisz:

$ grep '\$' książka

Przykład 2: Znajdź pojedynczy ciąg w pliku tekstowym

Aby wypisać wiersze w pliku „book”, który zawiera ciąg „$14.99', wpisz:

$ grep '\14$\.99' książka

Przykład 3: Znajdź jednego specjalnego czarterującego w pliku tekstowym

Aby wyprowadzić w pliku „książka” wiersze zawierające znak „\”, wpisz:

$ grep '\\' książka

Przykład 4: Pasujące linie zaczynające się od określonego tekstu

Użyj 'ˆ' w wyrażeniu regularnym, aby oznaczyć początek linii.

Aby wypisać wszystkie wiersze w '/usr/dict/words' zaczynające się od 'pro', wpisz:

$ grep 'ˆpro' /usr/dict/words

Aby wypisać wszystkie wiersze w pliku 'book', które zaczynają się od tekstu 'na początku', niezależnie od wielkości liter, wpisz:

$ grep -i 'ˆna początku' książka

UWAGA: Te wyrażenia regularne były cytowane z' znakami; dzieje się tak, ponieważ niektóre powłoki traktują znak 'ˆ' jako specjalny „metaznak”

Oprócz wyszukiwania słów i fraz, możesz użyć grep do wyszukiwania złożonych wzorców tekstowych zwanych wyrażeniami regularnymi. Wyrażenie regularne — lub „regexp” — to ciąg tekstowy znaków specjalnych, który określa a zestaw wzorów do dopasowania.

Technicznie rzecz biorąc, wzorce słów lub fraz są wyrażeniami regularnymi – tylko bardzo prostymi. W wyrażeniu regularnym większość znaków, w tym litery i cyfry, reprezentuje siebie. Na przykład wzorzec regexp 1 dopasowuje ciąg '1' i wzorzec chłopiec pasuje do ciągu „chłopiec”.

Istnieje wiele zarezerwowanych znaków zwanych metaznakami, które nie reprezentują siebie w wyrażeniu regularnym, ale mają specjalne znaczenie używane do budowania złożonych wzorców. Te metaznaki są następujące: ., *, [, ], ˆ, $ i \. Warto zauważyć, że takie metaznaki są wspólne dla prawie wszystkich popularnych i specjalnych dystrybucji Linuksa. Oto dobry artykuł, który omawia specjalne znaczenia metaznaków i podaje przykłady ich użycia.

Przykład 5: Dopasowanie linii kończących się określonym tekstem

Użyj „$” jako ostatniego znaku cytowanego tekstu, aby dopasować ten tekst tylko na końcu wiersza. Aby wypisać w pliku wiersze 'going' kończące się wykrzyknikiem, wpisz:

$ grep '!$' idę

Przykład 6: Dopasowanie linii o określonej długości

Aby dopasować wiersze o określonej długości, użyj tej liczby „.' znaków pomiędzy 'ˆ' i '$'-na przykład, aby dopasować wszystkie linie o szerokości dwóch znaków (lub kolumn), użyj 'ˆ… $' jako wyrażenia regularnego do wyszukiwania.

Aby wypisać wszystkie wiersze w '/usr/dict/words' o szerokości dokładnie trzech znaków, wpisz:

$ grep 'ˆ… $' /usr/dict/words

W przypadku dłuższych linii bardziej przydatne jest użycie innej konstrukcji: 'ˆ.\liczba\$', gdzie liczba to liczba linii do dopasowania. Użyj ',', aby określić zakres liczb.

Aby wypisać wszystkie wiersze w '/usr/dict/words' o szerokości dokładnie dwunastu znaków, wpisz:

$ grep 'ˆ.\12\$' /usr/dict/words

Aby wypisać wszystkie wiersze w „/usr/dict/words”, które mają dwadzieścia dwa lub więcej znaków, wpisz:

$ grep 'ˆ.\22,\$' /usr/dict/words

Przykład 7: Pasujące linie, które zawierają dowolne z niektórych wyrażeń regularnych

Aby dopasować wiersze zawierające dowolną liczbę wyrażeń regularnych, określ każde z wyrażeń regularnych do wyszukania między operatorami alternatywnymi ('\|') jako wyrażenie regularne do wyszukania. Linie zawierające dowolne z podanych wyrażeń regularnych zostaną wyprowadzone.

Aby wyświetlić wszystkie wiersze w „playboyu”, które zawierają wzorce „książka” lub „ciasto”, wpisz:

$ grep 'książka\|ciasto' playboy

Przykład 8: Dopasowywanie linii, które zawierają wszystkie niektóre wyrażenia regularne

Aby wyprowadzić wiersze, które pasują wszystko wielu wyrażeń regularnych, użyj grep, aby wypisać wiersze zawierające pierwsze wyrażenie regularne, które chcesz dopasować, i potokuj wynik do grep z drugim wyrażeniem regularnym jako argumentem. Kontynuuj dodawanie potoków do wyszukiwania grep dla wszystkich wyrażeń regularnych, które chcesz wyszukać.

Aby wyświetlić wszystkie wiersze z „playlisty”, która zawiera oba wzorce „brzeg” i „niebo”, niezależnie od wielkości liter, wpisz:

$ grep -i playlista 'the shore' | grep-i niebo

Przykład 9: Pasujące linie, które zawierają tylko określone znaki

Aby dopasować wiersze zawierające tylko określone znaki, użyj wyrażenia regularnego „ˆ[znaki]*$”, gdzie znaki to te, które mają zostać dopasowane.  Aby wypisać wiersze w '/usr/dict/words' zawierające tylko samogłoski, wpisz:

$ grep -i 'ˆ[aeiou]*$' /usr/dict/words

Opcja '-i' dopasowuje znaki bez względu na wielkość liter; więc w tym przykładzie wszystkie znaki samogłosek są dopasowywane niezależnie od wielkości liter.

Przykład 10: Znajdowanie fraz bez względu na odstępy

Jednym ze sposobów wyszukiwania frazy, która może wystąpić z dodatkowymi odstępami między słowami lub w poprzek wiersza lub podziału strony, jest usunięcie wszystkich znaków nowego wiersza i dodatkowych spacji z danych wejściowych, a następnie grep, że. Aby to zrobić, potokuj wejście do tr z "\r\n:\>\|-"jako argumentem opcji '-d' (usuwając wszystkie znaki końca linii z wejścia); prześlij to do filtra fmt z opcją '-u' (wyprowadzając tekst z jednolitymi odstępami); i potrząśnij, aby grep z wzorem do wyszukania.

Aby przeszukać podziały wierszy dla ciągu „w tym samym czasie co” w pliku „docs”, wpisz:

$ dokumentacja kota | tr -d '\r\n:\>\|
-' | fmt-u | grep 'w tym samym czasie co'

streszczenie

W tym artykule omówiliśmy 10 praktycznych przykładów użycia polecenia Grep Linux do wyszukiwania i znajdowania ciągów w pliku tekstowym. Po drodze nauczyliśmy się używać wyrażeń regularnych w połączeniu z Grepem do przeprowadzania złożonych wyszukiwań w plikach tekstowych. Teraz masz lepszy pomysł na to, jak potężne są funkcje wyszukiwania Linuksa.

Oto dodatkowe zasoby dla tych, którzy chcą dowiedzieć się więcej o programowaniu w Linuksie:

Zasoby dla administratorów systemu

Zasoby dla programistów jądra Linux

Słownik systemu plików Linux

Kompleksowy przegląd działania systemu plików i katalogów Linux

Control & manage mouse movement between multiple monitors in Windows 10
Dual Display Mouse Manager lets you control & configure mouse movement between multiple monitors, by slowing down its movements near the border. Windo...
WinMouse lets you customize & improve mouse pointer movement on Windows PC
If you want to improve the default functions of your mouse pointer use freeware WinMouse. It adds more features to help you get the most out of your h...
Mouse left-click button not working on Windows 10
If you are using a dedicated mouse with your laptop, or desktop computer but the mouse left-click button is not working on Windows 10/8/7 for some rea...