Использование команды grep для сопоставления регулярных выражений

Завершено

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

Базовое использование

Давайте начнем с базового использования команды. Общий синтаксис grep имеет вид grep 'pattern' [file_to_search], где значение шаблона заключено в символы апострофа (').

Чтобы найти все строки в файле с шаблоном *.novo.dk, мы укажем регулярное выражение следующим образом:

  • Начните с символа звездочки (*) для поиска строк, соответствующих любому символу, ноль и более раз.
  • После символа звездочки добавьте строку .novo.dk. В этом примере точка (.) является литеральной и не используется в качестве подстановочного знака.
  • Используйте escape-символ обратной косой черты (\) для специальных символов в шаблоне: звездочка и точка.

Использование grep для файла

Мы будем искать все строки в файле NASA-logs-1995.txt, которые содержат шаблон grep'*.novo.dk'.

  1. Сначала закройте редактор Cloud Shell, чтобы в терминале было достаточно места для просмотра выходных данных команды.

    Закрыть редактор можно двумя способами:

    • Нажмите клавиши CTRL+Q.
    • Нажмите кнопку с многоточием (...) и выберите Закрыть редактор.

    Снимок экрана с параметром

  2. Выполните команду 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.