В Linux команда обработки текста egrep
(Extended Global Regular Expression Print) ищет шаблоны или регулярные выражения в указанном месте.
Утилита обеспечивает тот же вывод, что и grep -E
, но работает значительно быстрее.
Содержание
Синтаксис
$ egrep [параметры] [поисковый_запрос] [месторасположение]
Параметры
- -c
- Подсчитывает совпадающие строки
- -v
- Активирует обратное сопоставление
- -l
- Отображает только имена файлов с совпадениями
- -L
- Отображает только имена файлов, без совпадений
- -e
- Позволяет использовать дефис в начале шаблона
- -H
- Отображает имена файлов в дополнение к стандартному выводу
- -i
- Активирует поиск без учета регистра
- -o
- Выводит только совпавшую строку, а не всю строку
- -w
- Выводит только строки, содержащие целые слова
- -x
- Показывает только строки, соответствующие всей строке
- -n
- Показывает номера строк вместе с соответствующей строкой
- -r
- Ищет поисковый запрос в указанном каталоге и его подкаталогах
- -b
- Показывает положение совпадений в файле
- -B (n)
- Выводит строку со строкой поиска и n предыдущих строк
- -A (n)
- Выводит строку, содержащую строку поиска, и n строк после
- -C (n)
- Выводит строку, содержащую строку поиска, и n строк до и после
Если в качестве ФАЙЛА указан символ -
, то читается стандартный ввод. Если ФАЙЛ не указан, то читается текущий каталог. Если указано менее двух ФАЙЛОВ, то предполагается -h
.
При нахождении совпадений любой строки кодом завершения будет 0
и 1
, если ничего не совпало. При возникновении ошибок и если не указан параметр -q
, кодом завершения будет 2
.
Использование команды egrep в Linux
Утилита egrep позволяет включать в одну команду несколько шаблонов. Утилита также использует такие символы, как *
, +
, ?
, |
в качестве метасимволов по умолчанию, что устраняет необходимость использования обратного слэша \
.
Разнообразие допускает многократное практическое использование egrep
, а частое использование объясняется в следующих примерах.
В egrep
функция поиска чувствительна к регистру, то есть прописные и строчные буквы интерпретируются по-разному.
Поиск строки в файле
Команда egrep
чаще всего используется для поиска строки в файле. В качестве примера найдём строку Монт
в файле usa_capitals_ru.txt
с помощью команды egrep
:
oleg@mobile:~/Directory:$ egrep Монт usa_capitals_ru.txt
Монтгомери
Монтпилиер
oleg@mobile:~/Directory:$
Поиск с регулярными выражениями
Команда egrep работает с расширенными регулярными выражениями, которые содержат больше символов для указания шаблона соответствия такие как *
, +
, ?
, |
. Метасимволы, называемые квантификаторами, определяют количество появлений.
oleg@mobile:~/Directory:$ egrep 'Д*С' usa_capitals_ru.txt
Спрингфилд
Сакраменто
Сент-Пол
Джефферсон-Сити
Карсон-Сити
Санта-Фе
Оклахома-Сити
Сейлем
Сити
oleg@mobile:~/Directory:$
Вывод показывает все строки, содержащие символы Д и С.
Поиск определённых символов
Найдём разные символы в тексте с помощью команды egrep
и квадратными скобками. Выражения в квадратных скобках позволяют утилите сопоставлять разные символы. В примере ищем символы M, N, O в файле usa_capitals_ru.txt
:
oleg@mobile:~/Directory:$ egrep [MNO] usa_states.txt
Maine
Maryland
Massachusetts
Michigan
Minnesota
Mississippi
Missouri
MontanaNebraska
Nevada
New Hampshire
New Jersey
New Mexico
New York
North Carolina
North Dakota
Ohio
Oklahoma
Oregon
oleg@mobile:~/Directory:$
Использование знака вставки (крышки) ^
в начале выражения в квадратных скобках позволяет искать всё, кроме указанной строки. Повторим предыдущий пример, но используем при этом ^
:
oleg@mobile:~/Directory:$ egrep [^MNO] usa_states.txt
Alabama
Alaska
Arizona
Arkansas
California
Colorado
Connecticut
Delaware
Florida
Georgia
Hawaii
Idaho
IllinoisIndiana
Iowa
Kansas
Kentucky
Louisiana
Maine
Maryland
Massachusetts
Michigan
Minnesota
Mississippi
Missouri
MontanaNebraska
Nevada
New Hampshire
New Jersey
New Mexico
New York
North Carolina
North Dakota
Ohio
Oklahoma
Oregon
PennsylvaniaRhode Island
South Carolina
South Dakota
Tennessee
Texas
Utah
Vermont
Virginia
Washington
West Virginia
Wisconsin
Wyoming
oleg@mobile:~/Directory:$
Команда вывела все строки, не содержащие заглавные буквы M, N, O.
Использование конвейера
Существует и способ поиска с передачей символов по конвейеру, так как |
распознаётся утилитой в качестве метасимвола.
Пример:
oleg@mobile:~/Directory:$ egrep 'M|N|O' usa_states.txt
Maine
Maryland
Massachusetts
Michigan
Minnesota
Mississippi
Missouri
MontanaNebraska
Nevada
New Hampshire
New Jersey
New Mexico
New York
North Carolina
North Dakota
Ohio
Oklahoma
Oregon
oleg@mobile:~/Directory:$
При передаче строки поиска по конвейеру её обязательно следует заключать в одинарные кавычки.
Pipeline может работать не только с символами, но и с выражениями. Для примера найдём с использованием утилитой и |
два разных выражения New
, Dakota
:
oleg@mobile:~/Directory:$ egrep 'New|Dakota' usa_states.txt
New Hampshire
New Jersey
New Mexico
New York
North Dakota
South Dakota
oleg@mobile:~/Directory:$
Результат, полагаю, в пояснениях не нуждается.
Поиск в диапазоне
Дефис внутри выражения в квадратных скобках создаёт выражение диапазона. Выполнение команды с пронумерованным диапазоном в качестве строки поиска выводит все строки с указанными номерами.
В диапазоне могут, конечно, использоваться и буквы. Выведем все строки диапазона N-R
:
oleg@mobile:~/Directory:$ egrep [N-R] usa_states.txt
MontanaNebraska
Nevada
New Hampshire
New Jersey
New Mexico
New York
North Carolina
North Dakota
Ohio
Oklahoma
Oregon
PennsylvaniaRhode Island
oleg@mobile:~/Directory:$
Выражения в квадратных скобках допускают несколько диапазонов. Для примера используем символы b, B, c, C:
oleg@mobile:~/Directory:$ egrep [b-cB-C] usa_states.txt
Alabama
California
Colorado
Connecticut
Kentucky
Massachusetts
Michigan
MontanaNebraska
New Mexico
North Carolina
South Carolina
Wisconsin
oleg@mobile:~/Directory:$
Были выведены все строки, содержащие заданные символы.
Количество совпадающих строк
Можно вывести лишь общее количество строк, содержащих поисковый запрос, если использовать опцию -c
:
oleg@mobile:~/Directory:$ egrep -c [N-R] usa_states.txt
12
oleg@mobile:~/Directory:$
Из вывода видно, что диапазон N-R
содержит 12 строк.
Поиск в каталоге
Для поиска строки любого файла текущего каталога используется *
в качестве местоположения:
oleg@mobile:~/Directory:$ egrep [N-R] *
example.txt:fristName lastName age city ID
example.txt:Peter Petrov 43 Berlin 600
example.txt:Sidor Sidorov 52 Sofia N/A
example.txt:Paul Pavlov 33 London 300
example.txt:Carl Carlson 30 Rome N/A
usa_states_ru.txt:Арканзас (AR)
usa_states_ru.txt:Индиана (IN)
usa_states_ru.txt:Колорадо (CO)
usa_states_ru.txt:Миннесота (MN)
usa_states_ru.txt:Миссури (MO)
usa_states_ru.txt:Небраска (NE)
usa_states_ru.txt:Невада (NV)
usa_states_ru.txt:Нью-Джерси (NJ)
usa_states_ru.txt:Нью-Мексико (NM)
usa_states_ru.txt:Нью-Хэмпшир (NH)
usa_states_ru.txt:Нью-Йорк (NY)
usa_states_ru.txt:Огайо (OH)
usa_states_ru.txt:Оклахома (OK)
usa_states_ru.txt:Орегон (OR)
usa_states_ru.txt:Пенсильвания (PA)
usa_states_ru.txt:Род-Айленд (RI)
usa_states_ru.txt:Северная Дакота (ND)
usa_states_ru.txt:Северная Каролина (NC)
usa_states_ru.txt:Теннесси (TN)
usa_states.txt:MontanaNebraska
usa_states.txt:Nevada
usa_states.txt:New Hampshire
usa_states.txt:New Jersey
usa_states.txt:New Mexico
usa_states.txt:New York
usa_states.txt:North Carolina
usa_states.txt:North Dakota
usa_states.txt:Ohio
usa_states.txt:Oklahoma
usa_states.txt:Oregon
usa_states.txt:PennsylvaniaRhode Island
oleg@mobile:~/Directory:$
Были выведены строки всех файлов каталога, содержащие символы N, O, R.
Утилита выводит все вхождения перечисленных символов в текущем каталоге, но не в его подкаталогах. Чтобы получить доступ к подкаталогам в команду необходимо включить опцию -r
.
Игнорирование регистра
Команда egrep
чувствительна к регистру, то есть прописные и строчные буквы интерпретируются по-разному. Использование опции -i
позволяет отключить учёт регистра:
oleg@mobile:~/Directory:$ egrep -i Мон usa_capitals_ru.txt
Монтгомери
Монтпилиер
Ричмонд
oleg@mobile:~/Directory:$
Были выведены строки, содержащие как Мон, так и мон.
Заключение
Внимательно изучив приведённые примеры применения в Linux команды egrep
вы научитесь осуществлять эффективный и быстрый поиск в файлах каталогов и подкаталогов.