grep

30 Греп примери

30 Греп примери
Можете да намерите grep, присъстващ дълбоко в мозъка на животните на Unix и Unix-подобни операционни системи. Това е основна програма, използвана за съвпадение на шаблони и е написана през 70-те години заедно с останалата част от инструмента UNIX, който познаваме и обичаме (или мразим).

Докато изучаването на официални езици и регулярни изрази е вълнуваща тема. Изучаването на grep има много повече от регулярните изрази. За да започнете с него и да видите красотата и елегантността на grep, първо трябва да видите някои реални примери.

Примери, които са удобни и улесняват живота ви. Ето 30 такива случая и опции за греп.

1. ps aux | grep

В ps aux са изброени всички процеси и свързаните с тях pids. Но често този списък е твърде дълъг, за да може човек да го провери. Извеждайки изхода към команда grep, можете да изброите процеси, работещи с много специфично приложение. Например може да бъде sshd или nginx или httpd.

# ps aux | grep sshd
корен 400 0.0 0.2 69944 5624 ?       Ss 17:47 0:00 / usr / sbin / sshd -D
корен 1076 0.2 0.3 95204 6816 ?       Ss 18:29 0:00 sshd: root @ pts / 0
корен 1093 0.0 0.0 12784 932 точки / 0 S + 18:29 0:00 grep sshd

2. Грепване на вашите IP адреси

В повечето операционни системи можете да изброите всичките си мрежови интерфейси и IP адреса, който е присвоен на този интерфейс, като използвате командата ifconfig или ip addr. И двете команди ще изведат много допълнителна информация. Но ако искате да отпечатате само IP адреса (да кажем за скриптове на черупки), тогава можете да използвате командата по-долу:

$ ip адрес | grep inet | awk 'печат $ 2; '
$ ip адрес | grep -w inet | awk 'печат $ 2; '# За линии с просто inet, а не inet6 (IPv6)

Командата ip addr получава всички подробности (включително IP адресите), след което се пренасочва към втората команда grep inet, която извежда само редовете с inet в тях. След това се въвежда в awk print отчета, който отпечатва втората дума във всеки ред (казано по-просто).

P.S: Можете да направите това и без grep, ако знаете awk добре знаете.

3. Разглеждайки неуспешни опити за SSH

Ако имате интернет сървър с публичен IP, той непрекъснато ще бъде бомбардиран със SSH опити и ако разрешите на потребителите да имат SSH достъп, базиран на парола (политика, която не бих препоръчал), можете да видите всички такива неуспешни опити, използвайки следната команда grep:

# cat / var / log / auth.дневник | grep “Fail”
Извадка изложена
5 дек. 16:20:03 debian sshd [509]: Неуспешна парола за корен от 192.168.0.100 порта 52374 ssh2
5 дек. 16:20:07 debian sshd [509]: Неуспешна парола за root от 192.168.0.100 порта 52374 ssh2
5 дек. 16:20:11 debian sshd [509]: Неуспешна парола за корен от 192.168.0.100 порта 52374 ssh2

4. Тръбопровод Grep към Uniq

Понякога grep ще изведе много информация. В горния пример може да се опитва да влезе във вашата система един-единствен IP адрес. В повечето случаи има само шепа такива нарушаващи IP адреси, които трябва да идентифицирате уникално и да поставите в черния списък.

# cat / var / log / auth.дневник | grep "Fail" | uniq -f 3

Командата uniq трябва да отпечатва само уникалните редове. Uniq -f 3 прескача първите три полета (за да пренебрегне времевите марки, които никога не се повтарят) и след това започва да търси уникални редове.

5. Grepping за съобщения за грешки

Използването на Grep за регистрационни файлове за достъп и грешки не се ограничава само до SSH. Уеб сървърите (като Nginx) регистрират грешки и регистрират достъпа доста щателно. Ако настроите скриптове за наблюдение, които ви изпращат предупреждения, когато grep “404” връща нова стойност. Това може да бъде доста полезно.

# grep -w "404" / var / www / nginx / access.дневник
192.168.0.100 - - [06 / Dec / 2018: 02: 20: 29 +0530] „ВЗЕМЕТЕ / favicon.ico HTTP / 1.1 "404 200
"http: // 192.168.0.102 / "" Mozilla / 5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit / 537.36 (KHTML, като Gecko) Chrome / 70.0.3538.110 Safari / 537.36 "
192.168.0.101 - - [06 / Dec / 2018: 02: 45: 16 +0530] „ВЗЕМЕТЕ / favicon.ico HTTP / 1.1 "404 143
"http: // 192.168.0.102 / "" Mozilla / 5.0 (iPad; CPU OS 12_1 като Mac OS X)
AppleWebKit / 605.1.15 (KHTML, като Gecko) Версия / 12.0 Mobile / 15E148 Safari / 604.1 "

Регулярният израз може да не е „404“, но някои други филтриращи регулярни изрази само за мобилни клиенти или само за устройства на Apple, разглеждащи уеб страница. Това ви позволява да имате по-задълбочена представа за ефективността на приложението си.

6. Списък на пакетите

За базирани на Debian системи dpkg -l изброява всички пакети, инсталирани на вашата система. Можете да въведете това в команда grep, за да търсите пакети, принадлежащи на конкретно приложение. Например:

# dpkg -l | grep "vim"

7. grep -v fileNames

За да изброите всички редове, които недей съдържат даден шаблон, използвайте флага -v. По същество това е обратното на обикновена команда grep.

8. grep -l

В него са изброени всички файлове, които съдържат поне една поява на предоставения шаблон. Това е полезно, когато търсите шаблон в директория с множество файлове. Той отпечатва само името на файла, а не конкретния ред с шаблона.

9. Опция за една дума -w

$ grep -w fileNames

Флагът -w казва на grep да търси дадения шаблон като цяла дума, а не само като подниз от ред. Например, по-рано сме изкопали IP адреса и модела инет отпечата редовете и с двете инет и inet6 изброяване както на IPv4, така и на IPv6 адреси. Но ако използвахме -w флаг само редовете с инет тъй като дума, предшествана и последвана от бели интервали, е валидно съвпадение.

10. Разширен редовен израз

Често ще откриете, че регулярните изрази, родени в Grep, са малко ограничаващи. В повечето скриптове и инструкции ще намерите използването на флага -E и това ще ви позволи да въведете шаблон в така наречения разширен режим.

Ето командите grep и grep -E за търсене на думи Супермен и Спайдърмен.

$ grep "\ (Супер | Паяк \) човек" текст
$ grep -E "(Super | Spider) man" текст

Както можете да видите, разширената версия е много по-лесна за четене.

11. Grep за вашите контейнери

Ако имате голям клъстер от контейнери, изпълнявани на вашия хост, можете да ги grep по име на изображение, състояние, портове, които те излагат и много други атрибути. Например,

$ docker ps | grep [име на изображение]

12. Grep за вашите шушулки

Докато сме на темата за контейнерите. Kubernetes често са склонни да стартират множество модули при дадено внедряване. Докато всеки шушулка има уникално име, в дадено пространство от имена те обикновено започват с името на внедряването. Можем да се справим с това и да изброим всички шушулки, свързани с дадено разполагане.

$ kubectl получи шушулки | grep

13. Grep за големи данни

Често пъти така нареченият анализ на „големи данни“ включва просто търсене, сортиране и преброяване на шаблони в даден набор от данни. Ниско ниво UNIX помощни програми като grep, uniq, wc са особено добри в това. Това блог пост показва хубав пример за задача, изпълнена само за секунди с помощта на grep и други помощни програми на Unix, докато Hadoop отне почти половин час.

Например това набор от данни е над 1.7GB размер. Той съдържа информация за множество шахматни мачове, включително направените ходове, кой е спечелил и т.н. Интересуваме се само от резултати, затова изпълняваме следната команда:

$ grep "Резултат" millionbase-2.22.pgn | сортиране | uniq -c
221 [Резултат "*"]
653728 [Резултат "0-1"]
852305 [Резултат "1-0"]
690934 [Резултат "1 / 2-1 / 2"]

Това отне около 15 секунди на 4-годишен процесор с 2 ядра / 4 нишки. Така че следващия път, когато решавате проблем с „големи данни“. Помислете дали можете да използвате grep вместо това.

14. grep -color = автоматично

Тази опция позволява на grep да маркира шаблона вътре в линията, където е намерен.

15. grep -i

Съвпадението на модела на Grep по своята същност е чувствително към малки и големи букви. Но ако не ви интересува това, използването на флага -i ще направи грепа без регистрация.

16. grep -n

Флагът -n ще показва номерата на редовете, така че няма да се притеснявате да намерите същия ред по-късно.

17. git grep

Git, системата за контрол на версиите, сама по себе си има вградена команда grep, която работи почти като обикновения ви grep. Но той може да се използва за търсене на модели на всяко фиксирано дърво, използвайки родния git CLI, вместо досадни тръби. Например, ако сте в главния клон на вашето репо, можете да прехвърлите репото, като използвате:

(главен) $ git grep

18. grep -o

Флагът -o е наистина полезен, когато се опитвате да отстранявате грешки в регулярния израз. Той ще отпечата само съответстващата част на реда, вместо целия ред. Така че, в случай, че получавате твърде много нежелана линия за предоставен шаблон и не можете да разберете защо това се случва. Можете да използвате знамето -o, за да отпечатате нарушаващия подниз и мотиви за вашия регекс назад от там.

19. grep -x

Флагът -x ще отпечата ред, ако и само ако целият ред съвпада с предоставения ви регекс. Това е донякъде подобно на флага -w, който отпечатва ред, ако и само от цяла дума съответства на предоставения регекс.

20. grep -T

Когато се занимавате с регистрационни файлове и изходи от скриптове на черупки, е повече от вероятно да срещнете твърди раздели, за да разграничите различните графи на изхода. Флагът -T ще подреди внимателно тези раздели, така че колоните да са подредени добре, правейки изхода четлив за човека.

21. grep -q

Това потиска изхода и тихо изпълнява командата grep. Много полезно при замяна на текст или стартиране на grep в демон скрипт.

22. grep -P

Хората, които са свикнали да perl синтаксис на регулярния израз, могат да използват флага -P, за да използват точно това. Не е нужно да научавате основен регулярен израз, който grep използва по подразбиране.

23. grep -D [ДЕЙСТВИЕ]

В Unix почти всичко може да се третира като файл. Следователно всяко устройство, сокет или FIFO поток от данни могат да бъдат подадени към grep. Можете да използвате флага -D, последван от ACTION (действието по подразбиране е READ). Няколко други опции са SKIP за безшумно пропускане на определени устройства и RECURSE за рекурсивно преминаване през директории и символни връзки.

24. Повторение

Ако търсите даден шаблон, който е повторение на известен по-прост модел, използвайте къдрави скоби, за да посочите броя на повторенията

$ grep -E „[0-9] 10“

Това отпечатва редове, съдържащи низове с дължина 10 или повече цифри.

25. Стенографии за повторение

Някои специални знаци са запазени за специфичен вид повторение на шаблона. Можете да използвате тези вместо къдрави скоби, ако отговарят на вашите нужди.

? : Моделът, предхождащ въпросителен знак, трябва да съвпада с нула или еднократно.

*: Моделът, предхождащ звездата, трябва да съвпада с нула или повече пъти.

+ : Моделът предхождащ плюс трябва да съвпада един или повече пъти.

25. Байтови отмествания

Ако искате да разберете байтовото отместване на редовете, където е намерен съответстващият израз, можете да използвате флага -b, за да отпечатате и отместванията. За да отпечатате отместването само на съответстващата част от ред, можете да използвате флага -b с флага -o.

$ grep -b -o [име на файл]

Отместването просто означава, след колко байта от началото на файла започва съответстващият низ.

26. egrep, fgrep и rgerp

Често ще виждате извикването на egrep, за да използвате разширения синтаксис на регулярния израз, който обсъдихме по-рано. Това обаче е остарял синтаксис и се препоръчва да избягвате да използвате това. Вместо това използвайте grep -E. По същия начин използвайте grep -F, вместо fgrep и grep -r вместо rgrep.

27. grep -z

Понякога входните данни за grep не са редове, завършващи с символ на нов ред. Например, ако обработвате списък с имена на файлове, те могат да идват от различни източници. Флагът -z казва на grep да третира символа NULL като завършващ ред. Това ви позволява да третирате входящия поток като всеки обикновен текстов файл.

28. grep -a [име на файл]

Флагът -a казва на grep да третира предоставения файл като че ли е обикновен текст. Файлът може да е двоичен, но grep ще третира съдържанието вътре, сякаш е текст.

29. grep -U [име на файл]

Флагът -U казва на grep да третира предоставените файлове, сякаш са двоични файлове, а не текст. По подразбиране grep отгатва типа на файла, като разглежда първите няколко байта. Използването на този флаг отменя, което предполага, че работи.

30. grep -m NUM

При големи файлове прихващането за израз може да отнеме вечно. Ако обаче искате да проверите само първите NUM номера на съвпадения, можете да използвате флага -m, за да постигнете това. Той е по-бърз и изходът често е управляем.

Заключение

Много ежедневна работа на сисадмин включва пресяване на големи части от текст. Това могат да бъдат дневници за сигурност, регистрационни файлове от вашия уеб или пощенски сървър, активност на потребителя или дори голям текст на ръководства. Grep ви дава тази допълнителна гъвкавост при работа с тези случаи на употреба.

Надяваме се, че горните няколко примера и случаи на употреба са ви помогнали да разберете по-добре този жив вкаменелост на софтуер.

Урок за OpenTTD
OpenTTD е една от най-популярните бизнес симулационни игри там. В тази игра трябва да създадете прекрасен транспортен бизнес. Въпреки това, ще започне...
SuperTuxKart за Linux
SuperTuxKart е страхотно заглавие, създадено да ви предостави безплатно изживяването на Mario Kart във вашата Linux система. Играта е доста предизвика...
Урок за битка за Уеснот
Битката за Уеснот е една от най-популярните стратегически игри с отворен код, които можете да играете по това време. Тази игра не само се разработва о...