Использование команды grep для сопоставления регулярных выражений
Итак, вы узнали об основных принципах проверки файлов и регулярных выражений. В этом уроке мы расскажем о команде grep
для поиска определенных файлов или команду stdin
для поиска шаблонов, соответствующих регулярному выражению. Как и другие команды, которые мы видели ранее, команда grep
имеет много флагов для управления потоком вывода и его поведением.
Базовое использование
Давайте начнем с базового использования команды. Общий синтаксис grep
имеет вид grep 'pattern' [file_to_search]
, где значение шаблона заключено в символы апострофа ('
).
Чтобы найти все строки в файле с шаблоном *.novo.dk
, мы укажем регулярное выражение следующим образом:
- Начните с символа звездочки (
*
) для поиска строк, соответствующих любому символу, ноль и более раз. - После символа звездочки добавьте строку
.novo.dk
. В этом примере точка (.
) является литеральной и не используется в качестве подстановочного знака. - Используйте escape-символ обратной косой черты (
\
) для специальных символов в шаблоне: звездочка и точка.
Использование grep для файла
Мы будем искать все строки в файле NASA-logs-1995.txt, которые содержат шаблон grep
'*.novo.dk'
.
Сначала закройте редактор Cloud Shell, чтобы в терминале было достаточно места для просмотра выходных данных команды.
Закрыть редактор можно двумя способами:
- Нажмите клавиши CTRL+Q.
- Нажмите кнопку с многоточием (...) и выберите Закрыть редактор.
Выполните команду
grep
, чтобы сопоставить регулярное выражение\*\.novo\.dk
в файле:grep '\*\.novo\.dk' NASA-logs-1995.txt
Вот несколько первых строк выходных данных:
... ***.novo.dk 807951981 GET /shuttle/countdown/video/livevideo2.gif 200 69067 ***.novo.dk 807952044 GET /htbin/cdt_clock.pl 200 543 ***.novo.dk 807952060 GET /shuttle/countdown/lps/fr.html 200 1879 ***.novo.dk 807952078 GET /shuttle/countdown/lps/fr.gif 200 30232 ***.novo.dk 807952102 GET /shuttle/countdown/lps/back.gif 200 1289
Использование grep для нескольких файлов
Можно также передать несколько файлов команде grep
.
Давайте найдем все вхождения слова "NASA" в обоих файлах наборов данных НАСА. На этот раз мы ожидаем гораздо больше результатов, поэтому вместо просмотра всех результатов мы укажем команде сообщить, сколько строк соответствует шаблону. Чтобы выполнить подсчет и создать отчет, мы передадим команде -c
флаг grep
.
Выполните следующую команду
grep
для двух файлов наборов данных:grep -c 'NASA' NASA-logs-1995.txt NASA-software-API.txt
Вы должны увидеть следующий результат:
NASA-logs-1995.txt:17277 NASA-software-API.txt:26
В наборе данных журнала содержится 17 277 вхождений "NASA", а в наборе данных API — 26 вхождений.
Флаги grep
Команда grep
очень эффективна. С ее помощью можно сопоставлять сложные регулярные выражения и настраивать поток вывода в зависимости от потребностей. Запомните несколько полезных флагов.
Флаг | Определение |
---|---|
grep -c |
Подсчитывает количество строк, соответствующих шаблону (эквивалентно grep 'pattern' file | wc -l ). |
grep -n |
Указывает номер строки и соответствующий шаблон. |
grep -i |
Разрешает соответствие, не учитывающее регистр. |
grep -w |
Ищет сопоставление по целому слову. |
grep -H |
Включает имена файлов (полезно, если вы выполняете поиск по нескольким файлам). |
grep -m <max number lines> |
Ограничивает количество отображаемых совпадений. Чтобы ограничить отображение только первыми четырьмя совпадениями, используйте -m4 . |