Zrozumienie polecenia grep z praktycznymi przykładami, aby łatwo filtrować i wyświetlać zawartość pliku
GREP
oznacza „Globalny druk wyrażeń regularnych”. Jest to przydatne narzędzie wiersza poleceń dostarczane przez Linuksa, służące do wyszukiwania wiersza tekstu, który odpowiada wzorcowi podanemu przez użytkownika.
grep
pobiera dane wejściowe od użytkownika w postaci ciągów lub słów, które użytkownik chce wyszukać w określonym pliku. Polecenie sprawdza następnie plik określony przez użytkownika pod kątem tego wzorca, a następnie zwraca wiersze zgodne z podanym wzorcem.
Wykonuje świetną robotę, filtrując zawartość pliku, dzięki czemu nasze zadanie jest łatwiejsze do wyszukiwania określonej zawartości w jednym lub wielu plikach jednocześnie.
W tym artykule przyjrzyjmy się szczegółowo działaniu grep
polecenia z kilkoma praktycznymi przykładami.
Opcje dostępne za pomocą grep
polecenia
Oto niektóre z podstawowych opcji, których będziesz często używać z grep
poleceniem.
Opcja |
Opis |
-i |
W przypadku wyszukiwania bez uwzględniania wielkości liter |
-r |
Aby rekursywnie wyszukiwać wszystkie pliki w określonym katalogu i jego podkatalogach |
-c |
Aby wyświetlić całkowitą liczbę wystąpień ciągu |
-v |
Aby wyświetlić niepasujące linie |
-w |
Filtruj dla tego konkretnego słowa używanego osobno |
Korzystanie z grep
polecenia
grep
Polecenie jest zwykle używane z narzędziem potoku ( |
). Można go zaimplementować za pomocą potoku powłoki, gdy chcesz go używać z innymi poleceniami Linuksa. Chociaż grep
może być również używany indywidualnie bez narzędzia rury ( |
).
Zobaczmy kilka podstawowych składni grep
polecenia z narzędziem potoku i bez niego.
Najpierw pokażę przykładowy plik tekstowy, którego użyję do zilustrowania grep
polecenia.
INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
india stands on three pillars of legislature, executive and judiciary.
India Is a Beautiful Country Of Peace Loving People.
India cares for the people as it's resource
cartesian coordinates
importance of all th cartesian coordinates.
Following are two empty lines.
use of a bullock cart is a common sight in the village for the agrarian chores.
This is the end of the sample file.
grep
stosuje się rury (|) narzędzia
grep
Polecenie można zaimplementować wraz z innymi poleceniami systemu Linux za pomocą potoków powłoki. Na przykład użycie cat
polecenia do wyświetlenia zawartości pliku, ale jednocześnie potok wyjścia za pomocą grep
polecenia, aby wyświetlić tylko zawartość, którą chcesz zobaczyć. Będzie to jaśniejsze, gdy przejdziemy przez przykład.
Składnia :
[command] | grep [string]
Przykład :
cat sample.txt | grep legislature
Tutaj użyłem cat
polecenia, aby wyświetlić kilka wierszy z pliku 'sample.txt'. Należy wyświetlić tylko te wiersze, które zawierają słowo „legislature”, a pozostałe wiersze należy pominąć.
Wyjście :
[email protected]:~/workspace$ cat sample.txt | grep legislature
india stands on three pillars of legislature, executive and judiciary.
[email protected]:~/workspace$
grep
używany bez rury ( | ) narzędzie
grep
może być nawet używany bezpośrednio jako pojedyncze polecenie bez użycia narzędzia pipe ( |
).
Składnia :
grep [string_to_be_searched] [filename]
Przykład :
grep India sample.txt
Wyjście :
India Is a Beautiful Country Of Peace Loving People.
India cares for the people as it's resource
Dlatego użyłem grep
polecenia bezpośrednio do filtrowania wierszy zawierających ciąg „Indie” z pliku tekstowego „sample.txt”.
Wyszukiwanie bez rozróżniania wielkości liter za pomocą grep
polecenia
Linux bardzo ostrożnie podchodzi do rozróżniania wielkości liter, gdy uruchamiamy polecenia na terminalu. Wymaga to od użytkownika rozważenia wielkości liter w łańcuchu umieszczonym w poleceniu.
Zobaczmy to na przykładzie.
grep peace sample.txt
W tym przypadku nie otrzymamy wyniku, ponieważ w przykładowym pliku nie ma słowa „pokój”. Mamy słowo „Pokój” przez duże „P”. Słowo jest takie samo, ale gdy użyjemy grep
polecenia bez żadnej opcji, wyszukuje ono dokładne dopasowanie w pliku, pomijając wszelkie zmiany wielkości liter.
Aby uniknąć tej niejednoznaczności, możesz po prostu użyć -i
opcji, która dosłownie mówi grep
poleceniu „zapomnij o przypadku, w którym umieściłem ciąg, i po prostu wyszukaj wszystkie pasujące wzorce w pliku”.
Składnia:
grep -i [string] [filename]
Przykład :
grep -i peace sample.txt
Wyjście :
INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
India Is a Beautiful Country Of Peace Loving People.
Wszystkie pasujące wiersze są wyświetlane niezależnie od wielkości pasującego łańcucha.
Wyszukiwanie rekurencyjne za pomocą grep
polecenia
-r
Opcja wyszuka wszystkie pliki w katalogu i wszystkich jego podkatalogów, który pasuje do wzorca ciąg dostarczone przez użytkownika w poleceniu.
Składnia :
grep -i -r [string] [file_path]
Przykład :
grep -i -r tomcat /home/gaurav/workspace
Ciąg tutaj to „tomcat” i zostanie przeszukany w obszarze roboczym katalogu. Wszystkie podkatalogi i pliki w katalogu „workspace” również zostaną przeskanowane w celu dopasowania do podanego wzorca ciągu.
Wyjście :
./context_log.policy:// catalina.policy - Security Policy Permissions for Tomcat 7
./context_log.policy:// Note: If tomcat-juli.jar is in ${catalina.base} and not in ${catalina.home},
./context_log.policy:// grant codeBase "file:${catalina.base}/bin/tomcat-juli.jar" {..}
./context_log.policy:grant codeBase "file:${catalina.home}/bin/tomcat-juli.jar" {
./context_log.policy: permission java.lang.RuntimePermission "accessClassInPackage.org.apache.tomcat.websocket.server";
./context.xml:
./catalina.properties:# - Tomcat Bootstrap JARs
./catalina.properties:# - Tomcat API JARs
./catalina.properties:# - Tomcat JARs
./catalina.properties:# - Common non-Tomcat JARs
./catalina.properties:org.apache.catalina.startup.TldConfig.jarsToSkip=tomcat7-websocket.jar
./catalina.properties:tomcat.util.buf.StringCache.byte.enabled=true
./catalina.properties:#tomcat.util.buf.StringCache.char.enabled=true
./catalina.properties:#tomcat.util.buf.StringCache.trainThreshold=500000
./catalina.properties:#tomcat.util.buf.StringCache.cacheSize=5000
./server.xml: pathname="conf/tomcat-users.xml" />
./server.xml:
./tomcat-users.xml:
./tomcat-users.xml:
./web.xml:
./web.xml:
UWAGA : Używając -r
opcji z grep
poleceniem musimy podać ścieżkę do pliku, a nie nazwę pliku
Wyszukiwanie całych słów tylko za pomocą grep
polecenia
Wiele razy jest tak, że będziesz szukał jednego słowa, ale w końcu zapełnisz swój terminal pasującymi liniami, które zawierają pasujące słowo, ale nie jako pojedyncze słowo. Możesz zobaczyć wiersze zawierające słowa, których podczęścią jest wprowadzony ciąg.
Mylisz się z tym? Nie martw się, o wiele łatwiej to zrozumieć, gdy zdobędziesz przykład.
Przykład :
Tutaj chcę wyszukać pojedyncze słowo „koszyk” i wyświetlić wszystkie wiersze pasujące do tego słowa w pliku „sample.txt”.
grep -i cart sample.txt
Wyjście :
Cartesian coordinates
importance of all the Cartesian coordinates.
use of a bullock cart is a common sight in the village for the agrarian chores
The cart went missing as the boy left it loose.
W wyniku można zauważyć, że słowo „kartezjański” zawiera również słowo „wózek”, a zatem wiersze zawierające słowo „kartezjański” są również wyświetlane, mimo że nie chcemy, aby były wyświetlane.
Możesz użyć -w
opcji z grep
poleceniem, aby rozwiązać tę niejednoznaczność.
Składnia :
grep -i -w [string] [filename]
Przykład :
grep -i -w cart sample.txt
Wyjście :
use of a bullock cart is a common sight in the village for the agrarian chores.
The cart went missing as the boy left it loose.
Teraz po skorzystaniu z w
opcji – grep
otrzymasz tylko te wiersze, w których słowo „koszyk” jest użyte jako całość.
Wyszukiwanie odwrócone za pomocą grep
polecenia
grep
polecenie może być również użyte w odwrotny sposób. Możemy użyć grep
polecenia odwrotnie, ukrywając pasujące linie i wyświetlając tylko te linie, w których nie znaleziono dopasowania. Możesz to zrobić za pomocą -v
opcji z grep
poleceniem.
Składnia :
grep -i -v [string] [filename]
Przykład :
grep -i -v resource sample.txt
Wyjście :
INDIA IS A BEAUTIFUL COUNTRY OF PEACE LOVING PEOPLE.
india stands on three pillars of legislature, executive and judiciary.
India Is a Beautiful Country Of Peace Loving People.
cartesian coordinates
importance of all th cartesian coordinates.
use of a bullock cart is a common sight in the village for the agrarian chores.
This is the end of the sample file.
Na wyjściu wyświetlane są wszystkie inne wiersze, poza wierszem zawierającym słowo „resource”.
Zliczanie wystąpień pasującego ciągu
Wynik grep
polecenia jest zwykle bardzo długi, jeśli dane w pliku są obszerne. Im więcej dopasowań, tym dłuższe są wyniki grep
polecenia. Linux udostępnia opcję, w której możesz wyświetlić liczbę wystąpień dopasowania.
Składnia :
grep -i -c [string] [filename]
Przykład :
grep -i -c india sample.txt
Wyjście :
[email protected]:~/workspace$ grep -i -c india sample.txt
4
[email protected]:~/workspace$
W tym przypadku wynikiem jest liczba będąca liczbą wystąpień słowa „Indie” w pliku sample.txt.
UWAGA : Użyłem tej -i
opcji w każdym przykładzie, aby być bezpiecznym w przypadku problemu z rozróżnianiem wielkości liter. Jeśli jesteś pewien co do wielkości słowa, którego szukasz, możesz bezpiecznie pominąć tę -i
opcję.
Wniosek
grep
W tym samouczku poznaliśmy podstawowe zastosowania polecenia w systemach Linux. Nauczyliśmy się również wyświetlać różne treści, które najlepiej odpowiadają naszym wymaganiom i nie zapychać terminala mnóstwem wierszy. grep
Polecenie z pewnością zaoszczędzi czas, jeśli zostanie użyte do skanowania dużych zbiorów danych.