Мощь регулярных выражений в сочетании с поддерживаемыми опциями в 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, или посетить страницу с официальной документацией .