16 опций grep, которые помогут вам в реальном мире

16 опций grep, которые помогут вам в реальном мире

Мощь регулярных выражений в сочетании с поддерживаемыми опциями в grep делает это возможным.

Синтаксис команды

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

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

Grep позволяет искать заданный шаблон не только в одном, но и в нескольких файлах с помощью масок (например, знака «*»):

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

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

G rep предлагает искать паттерн, не глядя на его регистр. Используйте флаг -i, чтобы утилита игнорировала регистр:

3. Поиск всего слова

Зачастую вместо частичного совпадения необходимо полное соответствие поисковому слову. Это можно сделать, используя флаг -w:

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

Иногда вместо фактического совпадения со строкой нам необходимо количество успешных совпадений, найденных grep. Этот результат можно получить, используя опцию -c:

5. Поиск в подкаталогах

Часто требуется выполнить поиск файлов не только в текущем рабочем каталоге, но и в подкаталогах. G rep позволяет это сделать с помощью флага -r:

Как можно заметить, grep проходит через каждый подкаталог внутри текущего каталога и перечисляет файлы и строки, в которых найдено совпадение.

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

Если вы хотите найти что-то несоответствующее заданному шаблону, grep и это умеет при помощи флага -v:

Можно сравнить вывод команды grep по одному и тому же шаблону и файлу с флагом -v или без него. С флагом печатается каждая строка, которая не соответствует шаблону.

7. Печать номеров строк

Если хотите напечатать номера найденных строк, чтобы узнать их позицию в файле, используйте опцию -n:

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

Для больших файлов вывод может быть огромным и тогда вам понадобится фиксированное количество строк вместо всей простыни. Можно использовать —m[num]:

Обратите внимание, как использование флага влияет на вывод для того же набора условий:

9. Отображение дополнительных строк

Иногда необходимо вывести не только строки по некоторому шаблону, но и дополнительные строки выше или ниже найденных для понимания контекста. Можно напечатать строку выше, ниже или оба варианта, используя флаги -A, -B или -C со значением num (количество дополнительных строк, которые будут напечатаны). Это применимо ко всем совпадениям, которые grep находит в указанном файле или в списке файлов.

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

  • с флагом A1 выведется 1 строка, следующая за основной;
  • B1 напечатает 1 строку перед основной;
  • C1 выведет по одной строке снизу и сверху.

10. Список имен файлов

Чтобы напечатать только имя файлов, в которых найден шаблон, используйте флаг -l:

11. Точный вывод строк

Если необходимо напечатать строки, которые точно соответствуют заданному шаблону, а не какой-то его части, применяйте в команде ключ -x:

В приведенном ниже примере file.txt содержится слово «support», а строки без точного совпадения игнорируются.

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

Используя регулярные выражения, можно найти начало строки:

Обратите внимание, как использование символа «^» изменяет выходные данные. Знак «^» указывает начало строки, т.е. ^It соответствует любой строке, начинающейся со слова It. Заключение в кавычки может помочь, когда шаблон содержит пробелы и т. д.

13. Совпадение по концу строки

Эта полезная регулярка способна помочь найти по шаблону конец строки:

Обратите внимание, как меняется вывод, когда мы сопоставляем символ «.» и когда используем «$», чтобы сообщить утилите о строках, заканчивающихся на «.» (без тех, которые могут содержать символ посередине).

14. Файл шаблонов

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

В примере мы создали файл шаблонов pattern.txt с таким содержанием:

Чтобы это использовать, применяйте ключ -f:

15. Указание нескольких шаблонов

G rep позволяет указать несколько шаблонов с помощью -e:

16. Расширенные выражения

G rep поддерживает расширенные регулярные выражения или ERE (похожие на egrep) с использованием флага -E.

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

Вот одно из применений ERE, когда необходимо вывести строки, например, из больших конфигурационных файлов. Здесь использовался флаг -v, чтобы не печатать строки, соответствующие шаблону ^(#|$).

Заключение

Приведенные выше примеры – лишь верхушка айсберга. G rep поддерживает целый ряд опций и может оказаться полезным инструментом в руках специалиста, который способен эффективно его использовать. Мы можем не только взять на вооружение приведенные выше примеры, но и комбинировать их, чтобы получить требуемый результат в различных условиях.

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