GNU grep
Введение
global regular expression print, или grep, - это мощная утилита командной строки в UNIX и Linux для поиска строк, соответствующих регулярному выражению.
grep позволяет искать строки в файлах и потоках вывода. Активно использует регулярные выражения для поиска.
Синтаксис
grep 'regexp' file
Эта команда ищет строки, содержащие regexp
, в файле file
и выводит их.
В качесте regexp
можно подставить регулярное выражение.
Лучше не убирать ''
— так bash точно не воспримет часть вашей регулярки в качестве глоба и передаст регулярное выражение как есть.
Флаги и Опции
grep предлагает множество флагов для настройки поиска и вывода.
Рекурсивный Поиск
Команда
grep -r 'regexp' .
ищет вхождение regexp
во всех файлах текущей директории, включая поддиректории рекурсивно. Символьные ссылки игнорируются.
Эта команда делает тоже самое, но раскрывает символьные ссылки:
grep -R 'regexp' .
очевидно, может зависнуть, если есть ссылка на директорию.
Контроль Совпадений
-i
: Игнорирование регистра при поиске.-v
: Инвертированный поиск (вывод строк, не содержащих совпадений).-w
: Поиск только целых слов, соответствующих шаблону.-x
: Поиск строк, полностью соответствующих шаблону.
Управление Выводом
-c
: Подсчёт количества совпадающих строк.--color
: Вывод совпадений с подсветкой.-n
: Вывод номера строки с совпадением.-l
: Вывод только имён файлов с совпадениями.
Контекстные Опции
-B
: Вывод заданного количества строк перед совпадением.-A
: Вывод заданного количества строк после совпадения.-C
: Вывод заданного количества строк до и после совпадения.
Примеры
grep -i 'шаблон' файл
Поиск без учета регистра.
grep -C 3 'шаблон' файл
Вывод 3 строк до и после совпадения.
Комбинирование grep
с другими командами
grep часто используется в сочетании с конвейерами и другими командами, такими как find
, xargs
.
Использование с find и xargs:
find /путь/к/каталогу -type f -name '*.txt' | xargs grep 'шаблон'
Эта команда ищет ‘шаблон’ во всех текстовых файлах в указанном каталоге.
Подсказка 💡
Не забывайте, что в именах файлов могут быть любые символы, кроме\0
и/
. Именно здесь это может привести к проблемам.
Флаги-0
,-printf
и пр - Ваши помощники.
Переменные Окружения
Поведение grep может быть изменено с помощью переменных окружения. Для получения дополнительной информации обратитесь к info grep
.
Регулярные Выражения в grep
grep поддерживает базовые (BRE) и расширенные (ERE) регулярные выражения.
grep '^[a-zA-Z]' файл
Строки, начинающиеся с буквы.
grep '[0-9]$' файл
Строки, заканчивающиеся цифрой.
grep -E 'шаблон1|шаблон2' файл
Включили расширенные регулярные выражения.