Поиск по сайту:

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? Поделитесь с нами своим мнением в комментариях ниже.