🐧 Основные примеры использования команды Grep в системах Linux

Мануал

Grep – это мощная команда UNIX, позволяющая выполнять поиск внутри содержимого файла по различным параметрам.

Она особенно полезна при устранении неполадок или отладке.

Команда grep имеет огромное количество опций и вариантов использования.

Скорее всего, вам никогда не понадобятся или не пригодятся все из них.

Однако в конечном итоге вы будете использовать несколько команд grep большую часть времени.

В этой статье перечислены наиболее распространенные команды grep с краткими примерами.

Это полезно, если вы уже знакомы с командой grep, но постоянно забываете, какая опция что делает.

Опция Пример команды Описание
i grep -i pattern file Поиск без учета регистра
A grep -A n pattern file Показать n строк после
B grep -B n pattern file Показать n строк перед
C grep -C n pattern file Показать n строк до и после
v grep -v pattern file Показать линии, которые не совпадают
c grep -c pattern file Подсчет количества совпадающих строк
l grep -l pattern file Отображать только имена файлов
w grep -w pattern file Совпадение точного слова
e grep -e regex file Соответствие шаблону регулярки
a grep -a pattern file Поиск в бинарных файлах
r grep -r pattern dir Рекурсивный поиск в каталоге

Быстрые примеры использования команды Grep

Вы, вероятно, уже знаете, что для поиска определенного текста или шаблона в файле нужно использовать команду grep следующим образом:

grep search_pattern filename

Рассмотрим несколько распространенных случаев использования команды grep.

Поиск без учета регистра

По умолчанию поиск с помощью grep чувствителен к регистру.

Вы можете игнорировать соответствие регистру с помощью опции -i:

grep -i holmes filename

Таким образом, grep будет возвращать строки, соответствующие и Holmes, и holmes.

Показать строки до и после совпадающих

По умолчанию вы видите только совпадающие строки.

Но когда вы устраняете неполадки, полезно видеть несколько строк до и/или после совпадающих строк.

Вы можете использовать параметр -A, чтобы показать строки после совпадающих.

Запомните, A – это “After” (после).

Команда, показанная ниже покажет совпадающие строки, а также 5 строк после совпадения.

grep -A 5 search_pattern filename

Аналогично, вы можете использовать параметр -B, чтобы показать строки перед совпадающими.

Запомните, что B – это “Before” ( До).

Команда, показанная ниже покажет 5 строк перед совпадающими строками вместе с совпадающей строкой (строками).

grep -B 5 search_pattern filename

Мне больше всего нравится опция -C, потому что она показывает линии, которые находятся до и после совпадающих.

Запомните, что C здесь означает Circle.

Команда ниже покажет 5 строк до совпадающей строки, совпадающую строку и 5 строк после совпадающей строки.

grep -C 5 search_pattern filename

Показать строки, которые не совпадают

Вы можете использовать grep для отображения всех строк, которые НЕ соответствуют заданному шаблону.

Это “инвертированное соответствие” используется с опцией -v:

grep -v search_pattern filename

Вы можете комбинировать опции -i и -v.

Подсчет количества совпадающих строк

Вместо того чтобы показывать совпадающие строки, вы можете просто узнать, сколько строк соответствует шаблону с помощью опции -c.

Это строчная буква c.

grep -c search_pattern filename

Вы можете комбинировать опции -c и -v, чтобы получить количество строк, не соответствующих заданному шаблону.

Конечно, вы можете использовать опцию -i, не чувствительную к регистру.

Показать номера совпадающих строк

Чтобы показать номера совпадающих строк, вы можете использовать опцию -n.

grep -n search_pattern filename

То же самое можно сделать с инвертированным поиском.

Поиск в нескольких файлах

Вы можете предоставить grep несколько файлов для поиска.

grep search_pattern file1 file2

Это может сработать, но более практичным примером является поиск в файлах определенного типа.

Например, если вы хотите искать строку только в скриптах оболочки (файлы, заканчивающиеся на .sh), вы можете использовать:

grep search_pattern *.sh

Рекурсивный поиск всех файлов в каталоге

Вы можете выполнить рекурсивный поиск с помощью опции grep -r.

Она будет искать заданный шаблон во всех файлах в текущем каталоге и его подкаталогах.

grep -r search_pattern directory_path

Отображать только имена файлов

По умолчанию grep показывает все совпадающие строки.

Если вы запустили поиск в нескольких файлах и хотите увидеть только те файлы, которые содержат строку, вы можете использовать опцию -l.

grep -l search_pattern files_pattern

Скажем, вы хотите посмотреть, какие файлы Markdown содержат слово “handbook”, вы можете использовать:

grep -l handbook *.md

Поиск только полного слова

По умолчанию grep показывает все строки, содержащие заданную строку.

Это не всегда нужно.

Если вы ищете слово ‘done’, он также покажет строки, содержащие слова ‘doner’ или ‘abandoned’.

Чтобы заставить grep искать только полное слово, вы можете использовать опцию -w:

grep -w search_string file

Таким образом, при поиске слова “done” будут показаны только строки, содержащие “done”, а не “doner” или “abandoned”.

Поиск по шаблонам регулярных выражений

Вы можете расширить возможности поиска, используя шаблоны regex.

Существует специальная опция -e, позволяющая использовать шаблоны regex, и опция -E, позволяющая использовать расширенные шаблоны regex.

grep -e regex_pattern file

Поиск того или иного шаблона

Вы можете искать несколько шаблонов в одном поиске grep.

Если вы хотите увидеть строки, содержащие тот или иной паттерн, вы можете использовать оператор |.

Однако этот специальный символ необходимо экранировать следующим образом.

grep 'pattern1\|pattern' filename

С оператором OR можно использовать несколько шаблонов.

Для оператора AND нет специальной опции.

Для этого можно использовать grep несколько раз с перенаправлением пайпа.

Поиск в бинарниках

По умолчанию Grep игнорирует бинарные файлы.

Вы можете заставить его выполнять, как в текстовых, используя опцию -a.

grep -a pattern binary_file

Заключение

Дайте мне знать, если у вас есть другие распространенные случаи использования grep, которые вы хотели бы видеть на этой странице.

см. также:

 

 

Добавить комментарий