LinuxAdministrator - find, locate, sort, znaki specjalne #006 #Linuxadministrator #bash #linux
Spisu treści:
- Składnia polecenia Grep
- Jak używać
grep
do wyszukiwania ciągu w plikach - Odwróć dopasowanie (wyklucz)
- Jak używać Grep do wyszukiwania ciągu w danych wyjściowych polecenia
- Wyszukiwanie rekurencyjne
- Pokaż tylko nazwę pliku
- Wyszukiwanie bez rozróżniania wielkości liter
- Szukaj pełnych słów
- Pokaż numery linii
- Policz mecze
- Szukaj wielu ciągów (wzorów)
- Tryb cichy
- Podstawowe wyrażenie regularne
- Rozszerzone wyrażenia regularne
- Drukuj linie przed dopasowaniem
- Drukuj linie po meczu
- Wniosek
Polecenie
grep
które oznacza „globalny wydruk wyrażeń regularnych”, jest jednym z najpotężniejszych i najczęściej używanych poleceń w systemie Linux.
Grep wyszukuje jeden lub więcej plików wejściowych w poszukiwaniu linii pasujących do danego wzorca i zapisuje każdą pasującą linię na standardowym wyjściu. Jeśli nie określono żadnych plików,
grep
odczytuje ze standardowego wejścia, które zwykle jest wyjściem innego polecenia.
W tym samouczku pokażemy, jak korzystać z polecenia
grep
poprzez praktyczne przykłady i szczegółowe objaśnienia najczęstszych opcji GNU
grep
.
Składnia polecenia Grep
Zanim przejdziemy do korzystania z polecenia
grep
, zacznijmy od zapoznania się z podstawową składnią.
Wyrażenia narzędzia
grep
mają następującą postać:
grep PATTERN
Pozycje w nawiasach kwadratowych są opcjonalne.
-
OPTIONS
- zero lub więcej opcji. Grep oferuje szereg opcji kontrolujących jego zachowanie.PATTERN
- wzór wyszukiwania.FILE
- zero lub więcej nazw plików wejściowych.
Aby móc przeszukać plik, użytkownik uruchamiający polecenie musi mieć dostęp do odczytu pliku.
Jak używać
grep
do wyszukiwania ciągu w plikach
Najbardziej podstawowym zastosowaniem polecenia
grep
jest wyszukiwanie ciągu (tekstu) w pliku.
Na przykład, aby wyświetlić linie z
/etc/passwd
zawierającego ciąg
bash
, możesz użyć następującego polecenia:
grep bash /etc/passwd
Dane wyjściowe powinny wyglądać mniej więcej tak:
root:x:0:0:root:/root:/bin/bash linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Jeśli ciąg zawiera spacje, musisz umieścić go w pojedynczym lub podwójnym cudzysłowie:
grep "Gnome Display Manager" /etc/passwd
Odwróć dopasowanie (wyklucz)
Aby wyświetlić linie, które nie pasują do wzorca, użyj opcji
-v
(lub
--invert-match
).
Na przykład, aby wyświetlić wiersze z
/etc/passwd
, które nie zawierają ciągu
nologin
, można użyć następującego polecenia:
grep -v nologin /etc/passwd
root:x:0:0:root:/root:/bin/bash colord:x:124:124::/var/lib/colord:/bin/false git:x:994:994:git daemon user:/:/usr/bin/git-shell linuxize:x:1000:1000:linuxize:/home/linuxize:/bin/bash
Jak używać Grep do wyszukiwania ciągu w danych wyjściowych polecenia
Zamiast określać pliki wejściowe, możesz potokować dane wyjściowe innego polecenia do
grep
, a następnie wyświetlać tylko wiersze pasujące do danego wzorca.
Na przykład, aby dowiedzieć się, które procesy są uruchomione w systemie jako
www-data
użytkownika, możesz użyć następującego polecenia
ps
:
ps -ef | grep www-data
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Możesz także połączyć wiele potoków na polecenie. Jak widać na powyższym wyjściu, istnieje również wiersz zawierający proces
grep
. Jeśli nie chcesz, aby ten wiersz był wyświetlany, przekaż dane wyjściowe do innego wystąpienia
grep
jak pokazano poniżej.
ps -ef | grep www-data | grep -v grep
www-data 18247 12675 4 16:00 ? 00:00:00 php-fpm: pool www root 18272 17714 0 16:00 pts/0 00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn www-data www-data 31147 12770 0 Oct22 ? 00:05:51 nginx: worker process www-data 31148 12770 0 Oct22 ? 00:00:00 nginx: cache manager process
Wyszukiwanie rekurencyjne
Aby rekurencyjnie wyszukać wzorzec, użyj opcji
-r
(lub
--recursive
). Spowoduje to przeszukanie wszystkich plików w określonym katalogu, pomijając dowiązania symboliczne napotkane rekurencyjnie. Aby śledzić wszystkie dowiązania symboliczne, użyj opcji
-R
(lub
--dereference-recursive
).
W poniższym przykładzie szukamy ciągu
linuxize.com
we wszystkich plikach w katalogu
/etc
:
grep -r linuxize.com /etc
Polecenie wyświetli pasujące linie poprzedzone pełną ścieżką do pliku.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com;
Jeśli zamiast tego
-r
użyjesz opcji
-R
grep
podąży za wszystkimi dowiązaniami symbolicznymi:
grep -R linuxize.com /etc
Zwróć uwagę na ostatni wiersz wyniku. Wiersz ten nie jest wydrukowany w powyższym przykładzie, ponieważ pliki w katalogu
sites-enabled
Nginx są dowiązaniami symbolicznymi do plików konfiguracyjnych w katalogu
sites-available
w
sites-available
.
/etc/hosts:127.0.0.1 node2.linuxize.com /etc/nginx/sites-available/linuxize.com: server_name linuxize.com www.linuxize.com; /etc/nginx/sites-enabled/linuxize.com: server_name linuxize.com www.linuxize.com;
Pokaż tylko nazwę pliku
Aby ukryć domyślne wyjście
grep
i drukować tylko nazwy plików zawierających pasujący wzorzec, możesz użyć opcji
-l
(lub
--files-with-matches
).
Na przykład, aby przeszukać wszystkie pliki z
.conf
w bieżącym katalogu roboczym i wydrukować tylko nazwy plików zawierających ciąg
linuxize.com
:
grep -l linuxize.com *.conf
Dane wyjściowe będą wyglądać mniej więcej tak:
tmux.conf haproxy.conf
Opcja
-l
jest zwykle używana w połączeniu z opcją rekurencyjną
-R
:
Wyszukiwanie bez rozróżniania wielkości liter
Domyślnie w poleceniu
grep
rozróżniana jest wielkość liter. Oznacza to, że wielkie i małe litery są traktowane jako odrębne.
Aby zignorować wielkość liter podczas wyszukiwania, użyj opcji
-i
(lub
--ignore-case
).
Na przykład podczas wyszukiwania
Zebra
bez żadnej opcji następujące polecenie nie wyświetli żadnych danych wyjściowych, tzn. Są pasujące linie:
grep Zebra /usr/share/words
Ale jeśli wykonasz wyszukiwanie bez rozróżniania wielkości liter za pomocą opcji
-i
, dopasuje zarówno wielkie, jak i małe litery:
grep -i Zebra /usr/share/words
Określenie „Zebra” będzie pasować do „zebry”, „ZEbrA” lub dowolnej innej kombinacji wielkich i małych liter dla tego łańcucha.
Szukaj pełnych słów
Podczas wyszukiwania „gnu”,
grep
wypisze również linie, w których „gnu” jest osadzone większymi słowami, takimi jak „cygnus” lub „magnum”.
grep gnu /usr/share/words
cygnus gnu interregnum lgnu9d lignum magnum magnuson sphagnum wingnut
Aby zwrócić tylko te wiersze, w których podany ciąg jest całym słowem (ujęty w znaki inne niż słowa), użyj opcji
-w
(lub
--word-regexp
).
az
,
AZ
i
0-9
) oraz podkreślenia (
_
). Wszystkie pozostałe znaki są uważane za znaki niebędące wyrazami.
grep -w gnu /usr/share/words
Pokaż numery linii
Aby wyświetlić liczbę wierszy zawierających ciąg pasujący do wzorca, użyj opcji
-n
(lub
--line-number
). Korzystając z tej opcji,
grep
wypisze dopasowania na standardowe wyjście poprzedzone numerem linii, na której zostało znalezione.
Na przykład, aby wyświetlić wiersze z
/etc/services
zawierającego ciąg
bash
poprzedzony pasującym numerem wiersza, możesz użyć następującego polecenia:
grep -n 10000 /etc/services
Poniższy wynik pokazuje, że dopasowania znajdują się w wierszach 10423 i 10424.
10423:ndmp 10000/tcp 10424:ndmp 10000/udp
Policz mecze
Aby wydrukować liczbę pasujących wierszy na standardowe wyjście, użyj opcji
-c
(lub
--count
).
W poniższym przykładzie zliczamy liczbę kont, które mają
/usr/bin/zsh
jako powłokę.
grep -c '/usr/bin/zsh' /etc/passwd
Szukaj wielu ciągów (wzorów)
Za pomocą operatora OR
|
można połączyć dwa lub więcej wzorców wyszukiwania.
Domyślnie
grep
interpretuje wzorzec jako podstawowe wyrażenie regularne, w którym metaznaki, takie jak
|
tracą swoje specjalne znaczenie i należy użyć ich wersji z odwrotnym ukośnikiem.
W poniższym przykładzie szukamy wszystkich wystąpień słów
fatal
,
error
irytical w pliku błędów dziennika Nginx:
grep 'fatal\|error\|critical' /var/log/nginx/error.log
grep -E 'fatal|error|critical' /var/log/nginx/error.log
Tryb cichy
-q
(lub
--quiet
) mówi
grep
aby nic nie zapisywał na terminalu (standardowe wyjście). Jeśli zostanie znalezione dopasowanie, polecenie zakończy pracę ze statusem
0
. Jest to przydatne, gdy używasz
grep
w skryptach powłoki, w których chcesz sprawdzić, czy plik zawiera ciąg znaków i wykonać określoną akcję w zależności od wyniku.
Oto przykład użycia
grep
w trybie cichym jako polecenia testowego w instrukcji
if
:
if grep -q PATTERN filename then echo pattern found else echo pattern not found fi
Podstawowe wyrażenie regularne
GNU Grep ma dwa zestawy funkcji wyrażeń regularnych: Podstawowy i Rozszerzony. Domyślnie
grep
interpretuje wzorzec jako podstawowe wyrażenie regularne.
Gdy są używane w podstawowym trybie wyrażeń regularnych, wszystkie inne znaki oprócz metaznaków są w rzeczywistości wyrażeniami regularnymi, które do siebie pasują. Poniżej znajduje się lista najczęściej używanych metaznaków:
-
Użyj symbolu
^
(karetka), aby dopasować wyrażenie na początku wiersza. W poniższym przykładzie łańcuch^kangaroo
będzie pasował tylko wtedy, gdy wystąpi na samym początku linii.grep "^kangaroo" file.txt
Użyj symbolu
$
(dolar), aby dopasować wyrażenie na końcu wiersza. W poniższym przykładzie łańcuchkangaroo$
będzie pasował tylko wtedy, gdy wystąpi na samym końcu linii.grep "kangaroo$" file.txt
Użyj
.
(kropka), aby dopasować dowolny pojedynczy znak. Na przykład, aby dopasować wszystko, co zaczyna się odkan
a następnie ma dwa znaki i kończy się ciągiemroo
, możesz użyć następującego wzorca:grep "kan..roo" file.txt
Posługiwać się
accept
lub „accent
”, możesz użyć następującego wzoru:grep "accet" file.txt
Posługiwać się
co(any_letter_except_l)a
, takich jakcoca
,cobalt
i tak dalej, ale nie będzie pasował do linii zawierającychcola
,grep "coa" file.txt
Aby uniknąć specjalnego znaczenia następnego znaku, użyj symbolu
\
(ukośnik odwrotny).
Rozszerzone wyrażenia regularne
Aby zinterpretować wzorzec jako rozszerzone wyrażenie regularne, użyj opcji
-E
(lub
--extended-regexp
). Rozszerzone wyrażenia regularne obejmują wszystkie podstawowe metaznaki wraz z dodatkowymi metaznakami, aby tworzyć bardziej złożone i wydajne wzorce wyszukiwania. Poniżej kilka przykładów:
-
Dopasuj i wyodrębnij wszystkie adresy e-mail z danego pliku:
grep -E -o "\b+@+\.{2, 6}\b" file.txt
Dopasuj i wyodrębnij wszystkie prawidłowe adresy IP z danego pliku:
grep -E -o '(25|2|??)\.(25|2|??)\.(25|2|??)\.(25|2|??)' file.txt
Opcja
-o
służy do drukowania tylko pasującego łańcucha.
Drukuj linie przed dopasowaniem
Aby wydrukować określoną liczbę wierszy przed dopasowaniem wierszy, użyj opcji
-B
(lub
--before-context
).
Na przykład, aby wyświetlić pięć linii wiodącego kontekstu przed dopasowaniem linii, należy użyć następującego polecenia:
Drukuj linie po meczu
Aby wydrukować określoną liczbę linii po dopasowaniu linii, użyj opcji
-A
(lub
--after-context
).
Na przykład, aby wyświetlić pięć linii kontekstu końcowego po dopasowaniu linii, należy użyć następującego polecenia:
Wniosek
Polecenie
grep
pozwala wyszukać wzór w plikach. Jeśli dopasowanie zostanie znalezione, grep wydrukuje linie zawierające określony wzór.
Jest wiele więcej informacji na temat Grep na stronie Grep Instrukcja użytkownika.
terminal grepZnajdź różnice w plikach za pomocą przeglądarki Freebie Comparer
Sam program Explorer niewiele mówi o tym, co powoduje, że pliki różnią się od siebie. Klejnot Donationware Comparer i jego wiele wtyczek działają lepiej.
Znajdź informacje w plikach tekstowych Indeksuj pliki Wyszukaj słowa Lite
Indeksuj wyszukiwanie plików Słowa Lite przypomina twoje własne Google ... w przypadku wielu plików tekstowych są na twoim twardym dysku.
Znajdź i zamień tekst w wielu plikach zbiorczo w systemie Windows
Narzędzie Znajdź i zamień pomoże znaleźć i zamienić tekst w wielu pliki hurtowo. Po prostu wpisz tekst i naciśnij Zastąp, aby natychmiast zastąpić tekst.