grep

Поиск строк в текстовых файлах с помощью grep с регулярным выражением

Поиск строк в текстовых файлах с помощью grep с регулярным выражением
grep - один из самых популярных инструментов для поиска строк в текстовом файле. Название 'grep' происходит от команды в теперь уже устаревшем инструменте редактора строк Unix ed - команде ed для поиска глобально через файл для регулярное выражение а потом печать эти строки были г / р / п, где re было регулярным выражением, которое вы бы использовали. В конце концов, команда grep была написана для выполнения этого поиска в файле, когда ed не используется.

В этой статье мы покажем вам, как выполнить расширенный поиск по строке с помощью Grep с регулярным выражением, предоставив вам 10 практических примеров его реализации. Многие примеры, обсуждаемые в этой статье, имеют практическое значение, что означает, что вы можете использовать их в повседневном программировании Linux. В следующих примерах описаны некоторые примеры регулярных выражений для часто используемых шаблонов.

Пример 1: Найдите одного фрахтователя в текстовом файле

Чтобы вывести строки в файле book, содержащие символ «$», введите:

$ grep '\ $' книга

Пример 2: Найдите одну строку в текстовом файле

Для вывода строк в файле book, который содержит строку $ 14.99 ', введите:

$ grep '\ $ 14 \.99 'книга

Пример 3: Найдите одного специального фрахтователя в текстовом файле

Чтобы вывести строки в файле book, содержащие символ '\', введите:

$ grep '\\' книга

Пример 4: Соответствие строк, начинающихся с определенного текста

Используйте 'ˆ' в регулярном выражении для обозначения начала строки.

Чтобы вывести все строки в '/ usr / dict / words', начинающиеся с 'pro', введите:

$ grep 'ˆpro' / usr / dict / слова

Чтобы вывести все строки в файле book, которые начинаются с текста в начале, независимо от регистра, введите:

$ grep -i 'в начале' книги

ПРИМЕЧАНИЕ: Эти регулярные выражения заключены в кавычки с символами '; это потому, что некоторые оболочки иначе трактуют символ 'ˆ' как специальный «метасимвол»

В дополнение к поиску слов и фраз вы можете использовать grep для поиска сложных текстовых шаблонов, называемых регулярными выражениями. Регулярное выражение или «регулярное выражение» - это текстовая строка специальных символов, определяющая набор шаблонов для соответствия.

С технической точки зрения, шаблоны слов или фраз - это регулярные выражения, просто очень простые. В регулярном выражении большинство символов, включая буквы и цифры, представляют собой самих себя. Например, шаблон регулярного выражения 1 соответствует строке '1' и шаблону мальчик соответствует строке 'мальчик'.

Существует ряд зарезервированных символов, называемых метасимволами, которые не представляют себя в регулярном выражении, но имеют особое значение, которое используется для построения сложных шаблонов. Эти метасимволы следующие: ., *, [, ], ˆ, $ и \. Приятно отметить, что такие метасимволы распространены практически среди всех распространенных и специальных дистрибутивов Linux. Вот хорошая статья, в которой рассматриваются специальные значения метасимволов и приводятся примеры их использования.

Пример 5: Соответствие строк, заканчивающихся определенным текстом

Используйте '$' в качестве последнего символа цитируемого текста, чтобы соответствовать этому тексту только в конце строки. Чтобы вывести в файле строки с восклицательным знаком, заканчивающиеся восклицательным знаком, введите:

$ grep '!$ 'идет

Пример 6: Соответствующие линии определенной длины

Чтобы сопоставить строки определенной длины, используйте это количество символов '.'символы между' ˆ 'и' $ '- например, чтобы соответствовать всем строкам шириной в два символа (или столбца), используйте' ˆ… $ 'в качестве регулярного выражения для поиска.

Чтобы вывести все строки в '/ usr / dict / words' шириной ровно три символа, введите:

$ grep 'ˆ… $' / usr / dict / words

Для более длинных строк более полезно использовать другую конструкцию: 'ˆ.\ number \ $ ', где число - это количество строк для сопоставления. Используйте ',', чтобы указать диапазон чисел.

Чтобы вывести все строки в '/ usr / dict / words' шириной ровно двенадцать символов, введите:

$ grep 'ˆ.\ 12 \ $ '/ usr / dict / слова

Чтобы вывести все строки в '/ usr / dict / words' шириной двадцать два или более символа, введите:

$ grep 'ˆ.\ 22, \ $ '/ usr / dict / words

Пример 7: Соответствующие строки, содержащие любое из некоторых регулярных выражений

Чтобы сопоставить строки, содержащие любое из нескольких регулярных выражений, укажите каждое из регулярных выражений для поиска между операторами чередования ('\ |') в качестве регулярного выражения для поиска. Строки, содержащие любое из заданных регулярных выражений, будут выведены.

Чтобы вывести все строки в 'playboy', которые содержат шаблоны 'the book' или 'cake', введите:

$ grep 'книга \ | торт' плейбой

Пример 8: Соответствующие строки, содержащие все некоторые регулярные выражения

Чтобы вывести строки, соответствующие все ряда регулярных выражений используйте grep для вывода строк, содержащих первое регулярное выражение, которое вы хотите сопоставить, и направьте вывод в grep со вторым регулярным выражением в качестве аргумента. Продолжайте добавлять каналы в поисковые запросы grep для всех регулярных выражений, которые вы хотите найти.

Чтобы вывести все строки в 'playlist', который содержит оба шаблона 'берег' и 'небо', независимо от регистра, введите:

$ grep -i Плейлист "берег" | grep -i небо

Пример 9: Соответствующие строки, содержащие только определенные символы

Чтобы сопоставить строки, содержащие только определенные символы, используйте регулярное выражение 'ˆ [characters] * $', где символы - это те, которые должны соответствовать.  Чтобы вывести в '/ usr / dict / words' строки, содержащие только гласные, введите:

$ grep -i 'ˆ [aeiou] * $' / usr / dict / words

Параметр '-i' соответствует символам независимо от регистра; Итак, в этом примере все гласные символы совпадают независимо от регистра.

Пример 10: Поиск фраз независимо от пробелов

Один из способов поиска фразы, которая может встречаться с дополнительными пробелами между словами или поперек строки или разрыва страницы, - это удалить из ввода все переводы строки и лишние пробелы, а затем выполнить grep,. Чтобы сделать это, направьте вход в tr с "\ r \ n: \> \ | -" в качестве аргумента опции '-d' (удаление всех разрывов строк из ввода); передать это фильтру fmt с параметром '-u' (вывод текста с равномерным интервалом); и передайте его в grep с шаблоном для поиска.

Чтобы выполнить поиск строки «одновременно с» в файле «docs» через разрывы строк, введите:

$ cat docs | tr -d '\ r \ n: \> \ |
-'| fmt -u | grep 'одновременно с'

Резюме

В этой статье мы рассмотрели 10 практических примеров использования команды Grep Linux для поиска и поиска строк в текстовом файле. Попутно мы узнали, как использовать регулярные выражения в сочетании с Grep для выполнения сложного поиска в текстовых файлах. К настоящему времени вы лучше понимаете, насколько мощны функции поиска в Linux.

Вот дополнительные ресурсы для тех, кто хочет узнать больше о программировании под Linux:

Ресурсы для системных администраторов

Ресурсы для программистов ядра Linux

Словарь файловой системы Linux

Комплексный обзор работы файловой системы и системы каталогов Linux

Битва за Веснот 1.13.6 Выпущена разработка
Битва за Веснот 1.13.6, выпущенная в прошлом месяце, является шестой разработкой в ​​1.13.x и содержит ряд улучшений, в первую очередь пользовательско...
Как установить League Of Legends на Ubuntu 14.04
Если вы поклонник League of Legends, то это возможность для вас протестировать League of Legends. Обратите внимание, что LOL поддерживается в PlayOnLi...
Установите последнюю версию игры OpenRA Strategy в Ubuntu Linux
OpenRA - это игровой движок Libre / Free Real Time Strategy, воссоздающий ранние игры Westwood, такие как классическая Command & Conquer: Red Alert. Р...