20 полезных примеров команд egrep в Linux
Кратко. В этом руководстве мы обсудим некоторые практические примеры команды egrep. Следуя этому руководству, пользователи смогут более эффективно выполнять поиск текста в Linux.
Вы когда-нибудь расстраивались из-за того, что не могли найти необходимую информацию в журналах? Извлечение необходимой информации из большого набора данных — сложная и трудоемкая задача.
Ситуация становится действительно сложной, если операционная система не предоставляет нужных инструментов, и на помощь вам приходит Linux. Linux предоставляет различные утилиты для фильтрации текста, такие как awk, sed, cut и т. д.
Однако egrep — одна из самых мощных и часто используемых утилит для обработки текста в Linux, и мы собираемся обсудить несколько примеров команды egrep.
Команда egre в Linux распознается семейством команд grep, которые используются для поиска и сопоставления определенного шаблона в файлах. Он работает аналогично grep -E (расширенное регулярное выражение grep), но в основном он ищет конкретный файл или даже строки в строке или печатает строку в данном файле.
Синтаксис команды egrep следующий:
egrep [OPTIONS] PATTERNS [FILES]
Давайте создадим образец текстового файла со следующим содержимым в качестве примера:
cat sample.txt
Здесь мы видим, что текстовый файл готов. Теперь давайте обсудим несколько распространенных примеров, которые можно использовать ежедневно.
1. Как найти шаблон в одном файле
Начнем с простого примера сопоставления с образцом, где мы можем использовать приведенную ниже команду для поиска строки professional
в файле sample.txt:
egrep professionals sample.txt
Здесь мы видим, что команда печатает строку, содержащую указанный шаблон.
2. Как выделить совпадающие шаблоны в файле
Мы можем сделать вывод более информативным, выделив совпавший шаблон. Для этого мы можем использовать параметр --color
команды egrep. Например, команда ниже выделит текст professionals
красным цветом:
egrep --color=auto professionals sample.txt
Здесь мы видим, что тот же вывод более информативен по сравнению с предыдущим. Также мы легко можем определить, что слово профессионалы
повторяется два раза.
В большинстве систем Linux указанный выше параметр включен по умолчанию с использованием следующего псевдонима:
alias egrep='egrep –color=auto'
3. Как найти шаблон в нескольких файлах
Команда egrep принимает в качестве аргумента несколько файлов, что позволяет нам искать определенный шаблон в нескольких файлах. Давайте разберемся в этом на примере.
Сначала создайте копию файла sample.txt:
cp sample.txt sample-copy.txt
Теперь найдите шаблон professionals
в обоих файлах:
egrep professionals sample.txt sample-copy.txt
В приведенном выше примере мы видим имя файла в выходных данных, которое представляет собой совпадающую строку из этого файла.
4. Как посчитать совпадающие строки в файле
Иногда нам просто нужно узнать, присутствует ли шаблон в файле. Если да, то в скольких строках оно присутствует? В таких случаях мы можем использовать опцию -c
команды.
Например, команда ниже отобразит 1 в качестве вывода, поскольку слово professionals
присутствует только в одной строке.
egrep -c professionals sample.txt
1
5. Как печатать в файле только совпадающие строки
В предыдущем примере мы видели, что опция -c
не подсчитывает количество вхождений шаблона. Например, слово professionals
встречается два раза в одной строке, но опция -c
обрабатывает его только как одно совпадение.
В таких случаях мы можем использовать опцию -o
команды, чтобы напечатать только совпавший шаблон. Например, команда ниже отобразит слово professionals
в двух отдельных строках:
egrep -o professionals sample.txt
Теперь давайте посчитаем строки с помощью команды wc:
egrep -o professionals sample.txt | wc -l
В приведенном выше примере мы использовали комбинацию команд egrep и wc для подсчета количества вхождений определенного шаблона.
6. Как найти закономерность, игнорируя регистр
По умолчанию egrep выполняет сопоставление с образцом с учетом регистра. Это означает слова – мы, Мы, мы и МЫ рассматриваются как разные слова. Однако мы можем обеспечить поиск без учета регистра, используя опцию -i
.
Например, в приведенной ниже команде сопоставление с шаблоном будет успешным для текста we
и We
:
egrep -i we sample.txt
7. Как исключить частично совпадающие шаблоны
В предыдущем примере мы видели, что команда egrep выполняет частичное совпадение. Например, когда мы искали текст мы
, сопоставление с шаблоном было успешным и для других текстов. Такие как Интернет, веб-сайт и были.
Чтобы обойти это ограничение, мы можем использовать опцию -w
, которая обеспечивает совпадение всего слова.
egrep -w we sample.txt
8. Как инвертировать сопоставление с образцом в файле
До сих пор мы использовали команду egrep для печати строк, в которых присутствует заданный шаблон. Однако иногда нам хочется выполнить операцию противоположным образом.
Например, мы можем захотеть напечатать строки, в которых данный шаблон отсутствует. Мы можем добиться этого с помощью опции -v
:
egrep -v we sample.txt
Здесь мы видим, что команда печатает все строки, которые не содержат текста we
.
9. Как найти номер строки шаблона
Мы можем использовать опцию -n
команды, чтобы включить нумерацию строк, которая показывает номер строки в выводе при успешном сопоставлении с образцом. Этот простой трюк делает вывод более значимым.
egrep -n professionals sample.txt
В приведенном выше выводе мы видим, что слово professionals
присутствует в 5-й строке.
10. Как выполнить сопоставление с образцом в тихом режиме
В тихом режиме команда egrep не печатает совпадающий шаблон. Поэтому нам нужно использовать возвращаемое значение команды, чтобы определить, удалось ли сопоставление с образцом.
Мы можем использовать опцию -q
команды, чтобы включить тихий режим, который пригодится при написании сценариев оболочки.
egrep -q professionals sample.txt
egrep -q non-existing-pattern sample.txt
В этом примере возвращаемое значение нулевое указывает на наличие шаблона, тогда как ненулевое значение указывает на отсутствие шаблона.
11. Как отображать линии перед совпадением с образцом
Иногда имеет смысл показать несколько линий вокруг совпавшего шаблона. Для таких сценариев мы можем использовать опцию -B
команды, которая отображает N строк перед совпадающим шаблоном.
Например, приведенная ниже команда напечатает строку, для которой сопоставление с шаблоном удалось, а также две строки перед ней.
egrep -B 2 -n professionals sample.txt
В этом примере мы использовали опцию -n
для отображения номеров строк.
12. Как отображать линии после совпадения с образцом
Аналогичным образом мы можем использовать опцию -A
команды для отображения строк после совпадения с шаблоном. Например, приведенная ниже команда напечатает строку, для которой сопоставление с шаблоном удалось, а также следующие две строки.
egrep -A 2 -n professionals sample.txt
13. Как отобразить линии вокруг совпадения с образцом
В дополнение к этому, команда egrep поддерживает опцию -C
, которая сочетает в себе функциональность опций -A
и -B
. , который отображает строки до и после совпадающего шаблона.
egrep -C 2 -n professionals sample.txt
14. Как рекурсивно найти шаблон в нескольких файлах
Как обсуждалось ранее, мы можем выполнить сопоставление шаблонов для нескольких файлов. Однако ситуация усложняется, когда файлы находятся в нескольких подкаталогах и мы передаем их все в качестве аргументов команды.
В таких случаях мы можем выполнить сопоставление с образцом рекурсивно, используя параметр -r
, как показано в следующем примере.
Сначала создайте 2 подкаталога и скопируйте в них файл sample.txt:
mkdir -p dir1/dir2
cp sample.txt dir1/
cp sample.txt dir1/dir2/
Теперь давайте выполним операцию поиска рекурсивно:
egrep -r professionals dir1
В приведенном выше примере мы видим, что сопоставление с шаблоном выполнено успешно для файлов dir1/dir2/sample.txt и dir1/sample.txt.
15. Как сопоставить один символ с помощью регулярных выражений
Мы можем использовать символ точки (.)
для соответствия любому одиночному символу, кроме конца строки. Например, приведенное ниже регулярное выражение соответствует тексту har, Hat и имеет:
egrep "ha." sample.txt
16. Как сопоставить ноль или более вхождений символа
Мы можем использовать звездочку (*)
, чтобы сопоставить ноль или более вхождений предыдущего символа. Например, приведенное ниже регулярное выражение соответствует тексту, который содержит строку we
, за которой следует ноль или более вхождений символа b
.
egrep "web*" sample.txt
17. Как сопоставить одно или несколько вхождений предыдущего символа
Мы можем использовать плюс (+)
для сопоставления одного или нескольких вхождений предыдущего символа. Например, приведенное ниже регулярное выражение соответствует тексту, который содержит строку we
, за которой следует хотя бы один символ b
.
egrep "web+" sample.txt
Здесь мы видим, что сопоставление с образцом не удается для слов — we
и were
из-за отсутствия символа b
.
18. Как сопоставить начало линии
Мы можем использовать курсор (^)
для обозначения начала строки. Например, приведенное ниже регулярное выражение печатает строки, начинающиеся с текста We
:
egrep "^We" sample.txt
19. Как сопоставить конец строки
Мы можем использовать доллар ($)
для обозначения конца строки. Например, приведенное ниже регулярное выражение печатает строки, заканчивающиеся текстом e.
:
egrep "e.$" sample.txt
20. Как удалить пустые строки в файле
Мы можем использовать курсор (^)
, за которым сразу следует знак доллара ($)
, чтобы обозначить пустую строку. Давайте используем это в регулярном выражении для удаления пустых строк:
egrep -n -v "^$" sample.txt
В приведенном выше выводе мы видим, что номера строк 2, 4, 6, 8 и 10 не отображаются, поскольку они пусты.
Заключение
В этой статье мы обсудили несколько полезных примеров команд egrep. Эти примеры можно использовать в повседневной жизни для повышения производительности.
Знаете ли вы какой-нибудь другой лучший пример команды egrep в Linux? Поделитесь с нами своим мнением в комментариях ниже.