⚡ ѕ–ќ…ƒ» Ќќ¬џ… ќЌЋј…Ќ  ”–— ѕќ —≈“≈¬џћ “≈’ЌќЋќ√»яћ —ќ — »ƒ ќ… 50%

до конца скидки осталось

Ќачать обучение 🚀
ћерион Ќетворкс

7 минут чтени€

»значально разработанный дл€ Unix-систем grep, €вл€етс€ одной из наиболее широко используемых утилит командной строки в среде Linux.

grep расшифровываетс€ как "глобальный поиск строк, соответствующих регул€рному выражению и их вывод" (globally search for a regular expression and print matching lines). grep в основном ищет на основе указанного посредством стандартного ввода или файла шаблона, или регул€рного выражени€ и печатает строки, соответствующие заданным критери€м. „асто используетс€ дл€ фильтрации ненужных деталей при печати только необходимой информации из больших файлов журнала.

Ёто возможно благодар€ совместной работе регул€рных выражений и поддерживаемых grep параметров.

ќбучайс€ в Merion Academy

ѕройди курс по
сетевым технологи€м

Ќачать

«десь мы рассмотрим некоторые из часто используемых сисадминами или разработчиками команд grep в различных сценари€х.


—интаксис grep

 оманда grep принимает шаблон и необ€зательные аргументы вместе со перечисл€ть файлов, если используетс€ без трубопровода.

$ grep [options] pattern [files]

ѕростой пример:

$ grep my file.txt
my_file

1. ѕоиск среди нескольких файлов

grep позвол€ет выполн€ть поиск заданного шаблона не только в одном, но и среди нескольких файлах. ƒл€ этого можно использовать подстановочный символ *.

$ sudo grep -i err /var/log/messages
$ sudo grep -i err /var/log/message

 ак видно из вывода, утилита перед результатом искомого шаблона выводит также название файла, что позвол€ет определить где именно было найдено совпадение.


2. –егистронезависимый поиск

grep позвол€ет искать шаблон без учета регистра. „тобы указать grep игнорировать регистр используетс€ флаг Цi.

$ grep -i [pattern] [file]
$ grep -i [pattern] [file]

3. ѕоиск слова

»ногда по€вл€етс€ необходимость поиска не части, а целого слова. ¬ таких случа€х утилита запускаетс€ с флагом -w.

$ grep -w [pattern] [file]
$ grep -w [pattern] [file]

4. ¬ывод количества совпадений

Ќе всегда нужно выводить результат совпадени€. »ногда достаточно только количества совпадений с заданным шаблоном. Ёту информацию мы можем получить с помощью параметра -c.

$ grep -c [pattern] [file]
$ grep -c [pattern] [file]

5. ѕоиск в поддиректори€х

„асто необходимо искать файлы не только в текущей директории, но и в подкаталогах. grep позвол€ет легко сделать это с флагом -r.

$ grep -r [pattern] *
$ grep -r [pattern] *

6. »нверсивный поиск

≈сли вы хотите найти что-то, что не соответствует заданному шаблону, grep позвол€ет сделать только это с флагом -v.

$ grep -v [pattern] [file]
$ grep -v [pattern] [file]

ћожно сравнить выходные резултаты grep дл€ одного и того же шаблона и файла с флагом -v и без него. — параметром -v вывод€тс€ любые строки, которые не соответствуют образцу.


7. ¬ывод нумерации строк

grep позвол€ет нумеровать совпавшие строки, что позвол€ет легко определить, где строка находитс€ в файле. „тобы получить номера строк в выходных данных. используйте параметр Цn:

$ grep -n [pattern] [file]
$ grep -n [pattern] [file]

8. ќграничение вывода

–езультат вывода grep дл€ файлов вроде журналов событий и т.д. может быть длинным, и вам может просто понадобитьс€ фиксированное количество строк. ћы можем использовать -m [num], чтобы ограничить выводимые строки.

$ grep -m[num] [pattern] [file]

ќбратите внимание, как использование флага -m вли€ет на вывод grep дл€ одного и того же набора условий в примере ниже:

$ grep -m[num] [pattern] [file]

9. ¬ывод дополнительных строк

„асто нам нужны не только строки, которые совпали с шаблоном, но некоторые строки выше или ниже их дл€ понимани€ контекста.

— помощью флагов -A, -B или -C со значением num можно выводить строки выше или ниже (или и то, и другое) совпавшей строки. «десь число обозначает количество дополнительных печатаемых строк, которое находитс€ чуть выше или ниже соответствующей строки. Ёто применимо ко всем совпадени€м, найденным grep в указанном файле или списке файлов.

$ grep -A[num] [pattern] [file]
$ grep -B[num] [pattern] [file]
$ grep -C[num] [pattern] [file]	

Ќиже показан обычный вывод grep, а также вывод с флагом -A, -B и -C один за другим. ќбратите внимание, как grep интерпретирует флаги и их значени€, а также изменени€ в соответствующих выходных данных. — флагом -A1 grep печатает 1 строку, котора€ следует сразу после соответствующей строки.

јналогично, с флагом -B1 он печатает 1 строку непосредственно перед соответствующей строкой. — флагом -C1 он печатает 1 строку, котора€ находитс€ до и после соответствующей строки.

A1/B1/C1

10. ¬ывод списка файлов

„тобы напечатать только им€ файлов, в которых найден образец, а не сами совпадающие строки, используйте флаг -l.

$ grep -l [pattern] [file]
$ grep -l [pattern] [file]

11. ¬ывод абсолютных совпадений

»ногда нам нужно печатать строки, которые точно соответствуют заданному образцу, а не какой-то его части. ‘лаг -x grep позвол€ет делать именно это.

$ grep -x [pattern] [file]

¬ приведенном ниже примере файл file.txt содержит строку только с одним словом Ђsupportї, что соответствует требованию grep с флагом Цx. ѕри этом игнорируютс€ строки, которые могут содержать слова Ђsupportї с сопутствующим текстом.

$ grep -x [pattern] [file]

12. ѕоиск совпадени€ в начале строки

— помощью регул€рных выражений можно найти последовательность в начале строки. ¬от как это сделать.

^

ќбратите внимание, как с помощью символ каретки ^ измен€ет выходные данные. —имвол каретки указывает grep выводить результат, только если искомое слово находитс€ в начале строки. ≈сли в шаблоне есть пробелы, то можно заключить весь образец в кавычки.


13. ѕоиск совпадени€ в конце строки

ƒругим распространенным регул€рным выражением €вл€етс€ поиск шаблона в конце строки.

$ grep [options] "[string]$" [file]
[string]$

¬ данном примере мы искали точку в конце строки. ѕоскольку точка . €вл€етс€ значимым символом, нужно еЄ экранировать, чтобы среда интерпретировала точку как команду. ќбратите внимание, как измен€етс€ вывод, когда мы просто ищем совпадени€ . и когда мы используем $ дл€ указани€ grep искать только те строки, которые заканчиваютс€ на . (не те, которые могут содержать его где-либо между ними).


14. »спользовани€ файла шаблонов

ћогут возникнуть ситуации, когда у вас есть сложный список шаблонов, которые вы часто используете. ¬место записи его каждый раз можно указать список этих образцов в файле и использовать с флагом -f. ‘айл должен содержать по одному образцу на каждой строке.

$ grep -f [pattern_file] [file_to_match]

¬ нашем примере мы создали файла шаблона с названием pattern.txt со следующим содержимым:

pattern.txt

ƒл€ его использовани€ используйте флаг -f.

-f

15. ѕоиск по нескольким шаблонам

grep позвол€ет задать несколько шаблонов с помощью флага -e.

$ grep -e [pattern1] -e [pattern2] -e [pattern3]...[file]
$ grep -e [pattern1] -e [pattern2] -e [pattern3]...[file]

16. ”казание расширенных регул€рных выражений

grep также поддерживает расширенные регул€рные выражени€ (Extended Regular Expressions Ц ERE) или с использованием флага -E. Ёто похоже на команду egrep в Linux.

»спользование ERE имеет преимущество, когда вы хотите рассматривать метасимволы как есть и не хотите экранировать их. ѕри этом использование -E с grep эквивалентно команде egrep.

$ grep -E '[Extended RegEx]' [file]

Ќиже приведЄн пример использование ERE, дл€ вывода не пустых и не закомментированных строк. Ёто особенно полезно дл€ поиска чего-то в больших конфигурационных файлах. «десь дополнительно использован флаг Цv, чтобы Ќ≈ выводить строки, соответствующих шаблону '^ (# | $)'.

$ grep -E '[Extended RegEx]' [file]

«аключение

ѕриведенные выше примеры €вл€ютс€ лишь верхушкой айсберга. grep поддерживает р€д вариантов и может быть очень полезным инструментом в руке человека, который знает, как его эффективно использовать. ћы можем не только использовать приведенные выше примеры, но и комбинировать их различными способами, чтобы получить то, что нам нужно. ƒл€ получени€ дополнительной информации можно воспользоватьс€ встроенной системой справки Linux Ц man.


>