Застосування регулярних виразів для конкретного пошуку тексту. Програма GREP.Опис, опції, приклад
Регулярні вирази застосовуються в багатьох редакторах, таких як emacs, в програмах grep/egrep і мовах, таких як awk, perl і sed. Регулярні вирази використовуються для розширеного контекстного пошуку і модифікації тексту. Регулярний вираз — це формальний опис шаблону, який відповідає текстовому рядку. Хоча регулярні вирази дуже широко поширені в світі Linux/unix, але не існує такої штуки, як "стандартна мова регулярних виразів". Є декілька різних діалектів. Наприклад, два типи програми grep: grep і egrep. Обидві використовують регулярні вирази з можливостями, що трохи відрізняються. Perl, можливо, має повніший набір регулярних виразів. На щастя, всі вони слідують загальним принципам.
Команда grep, одна із самих відомих і потрібних команд Юніксовидних ОС, веде свій початок від першого текстового редактора Юникс - ed. В цьому редакторі була команда g/re/p (global/regular expression/print), яка і дала свою назву новій програмі.
Використовує недетермінований алгоритм. Если имя_файла не указано, grep предполагает поиск в стандартном входном потоке. Команда grep слугує для пошуку рядка, який містить задачний користувачем зразок. Якщо ім’я файлу не задати то пошук буде задіяний безпосередньо у комінді вводу. Може також обробляти велику кількість файлів записаних через пробіл.
Синтаксис
grep зразок имя_файлу.
/usr/bin/grep [ -bchilnsvw ] ограниченное_регулярное_выражение
[ имя_файла ... ]
/usr/xpg4/bin/grep [ -E | -F ] [ -c | -l | -q ] [ -bhinsvwx ]
-e список_образцов ... [ -f файл_образцов ] ...
[ имя_файла ... ]
Список зразків переважно беруть в однинарні лапки ‘ ’
Опції:
-e – програмі вказує на те,що зразок списку - це повний регулярний вираз.
-f – визначається як фіксовані рядки
Якщо жодна з даних опцій не вказана, інтерпретує елементи спуску – зразка як прості регулярні вирази
-b -Предваряет каждую строку номером блока, в котором она была найдена.
c | Выдает только количество строк, содержащих образец. |
h | Предотвращает выдачу имени файла, содержащего сопоставившуюся строку, перед собственно строкой. Используется при поиске по нескольким файлам. |
i | Игнорирует регистр символов при сравнениях. |
l | Выдает только имена файлов, содержащих сопоставившиеся строки, по одному в строке. Если образец найден в нескольких строках файла, имя файла не повторяется. |
n | Выдает перед каждой строкой ее номер в файле (строки нумеруются с 1). |
s | Подавляет выдачу сообщений о не существующих или недоступных для чтения файлах. |
v | Выдает все строки, за исключением содержащих образец. |
e список_образцовЗадает один или несколько образцов для поиска. Образцы в списке_образцов должны разделяться символами новой строки
f файл_образцовЧитает один или несколько образцов из файла с указанным полным именем файл_образцов. Образцы в файле_образцовзавершаются символом новой строки. Пустой образец можно задать с помощью пустой строки в файле_образцов. Если только вместе с этой опцией не указана опция -E или -F, каждый образец счиается простым регулярным выражением.
-FЗадает сопоставление с фиксированными строками. Каждый образец ищется как строка, а не как регулярное выражение. Если входная строка содержит любой из образцов в качестве подряд идущих байтов, такая строка считается соответствующей образцу.
-xСчитает сопоставившимися только строки, все символы которых использованы при сопоставлении с фиксированной строкой или регулярным выражением.
Образцы в списке_образцов должны разделяться символами новой строки.
Приклади
Пример 1: Поиск всех вхождений слова
Чтобы найти все вхождения слова "Posix" (независимо от регистра) в файле text.mm и выдать номера соответствующих строк:
example% /usr/bin/grep -i -n posix text.mm
Пример 2: Поиск пустых строк
Чтобы найти все пустые строки в стандартном входном потоке:
example% /usr/bin/grep ^$ або
example% /usr/bin/grep -v .
Пример 3: Поиск строк, содержащих фиксированные подстроки
Обе следующих команды выдают все строки, содержащие подстроки abc, def или и ту, и другую:
example% /usr/xpg4/bin/grep -E 'abc def'
example% /usr/xpg4/bin/grep -F 'abc def'