1. Запустите оболочку Midnight Commander и выполните следующие действия:
- используя инструмент поиска, найдите в каталоге /usr/share/doc/ все файлы, имеющие расширение html;
- определите, сколько файлов в каталоге /bin имеют имена, состоящие из трех символов;
- в домашнем каталоге осуществите поиск файлов, имена которых содержат один из символов a,b,c,d,e;
- используя классы, найдите файлы с произвольным расширением, имена которых состоят ровно из двух букв в верхнем регистре.
Завершите работу с файловой оболочкой.
2. Проверьте последовательно существование файлов HOSTNAME и crontab в каталоге /etc.
3. Осуществите в каталоге /dev поиск всех файлов, имена которых начинаются на tt, используя шаблоны имен файлов.
4. Используя шаблоны, осуществите в каталоге /etc поиск всех файлов, имена которых состоят не менее, чем из 5 символов и второй символ находится в диапазоне от a до q.
5. Осуществите в каталоге /usr/bin поиск всех файлов, имена которых начинаются на au с выводом информации в файл au.txt, находящийся в домашнем каталоге. Просмотрите содержимое файла au.txt.
6. Осуществите в каталоге /usr поиск каталогов, имена которых начинаются на li.
7. Определите права доступа каталога mode и осуществите в домашнем каталоге поиск каталогов, которые имеют права доступа, аналогичные каталогу mode.
8. Осуществите в домашнем каталоге поиск всех файлов, владельцем которых является текущий пользователь и текущая группа пользователей.
9. В домашнем каталоге осуществите поиск файлов, которые были созданы в течение последних 10 дней.
10. В домашнем каталоге осуществите поиск файлов, которые были созданы позднее 10 дней назад, но ранее 6 дней назад.
11. Осуществите в каталоге /usr/lib поиск всех файлов, размер которых более 1 Мб, но менее 2 Мб.
12. В домашнем каталоге осуществите поиск всех символических ссылок.
Цель работы: освоить принципы составления базовых и расширенных регулярных выражений и их использование в команде egrep.
Используемые наборы регулярные выражения отличаются от приложения к приложению. Выделяют:
— базовые регулярные выражения, которые во всех программах обрабатываются одинаково.
— расширенные регулярные выражения, используемые, например, в команде egrep.
— регулярные выражения perl. Используются при написании скриптов на языке Perl.
Регулярное выражение представляет собой набор символов, некоторые из которых имеют специальное значение (являются метасимволами). В шаблонах расширенных регулярных выражений используются следующие метасимволы (представлены как базовые, так и расширенные).
Символ
Описание
Пример
. (точка)
Любой одиночный символ
c.t — «cat», «cut», но не «ct» и не «c.t»
^ (циркумфлекс)
Начало строки
^Computer — все строки, начинающиеся со слова «Computer», но не с «computer»
$
Конец строки
Memory$ — все строки, оканчивающиеся на слово «memory», но не на «memory.»
*
Предыдущий символ встречается 0 и более число раз подряд
200*9 — «209», «2009», «20009», но не «20019» и «20099»
+
Предыдущий символ встречается 1 и более число раз подряд
200+9 — «2009», «20009», «200009», но не «209» и «20099»
error\.$ — все строки, оканчивающиеся на «error.», но не на «error»
[список]
Диапазон символов; для удобства элементы списка можно разделять запятыми
[Aa][B,b][0-9] — «ab1», «aB5», но не «Aa1», «aB»
[^список]
Символы, не соответствующие списку
[^a-zA-Z] — любой символ, кроме буквы
[список]*
Список может повторяться неопределенное количество раз
[a-z,A-Z]* — любое слово
шаблон\{n\}
Шаблон встречается ровно n раз подряд
x\{3\}y — последовательность «xxxy»
шаблон\{n,\}
Шаблон встречается не менее n раз подряд
x\{3,\}y — «xxxy», «xxxxy», «xxxxxy», но не «xxy»
шаблон\{,n\}
Шаблон встречается не более n раз подряд
x\{,3\}y — «xy», «xxy», «xxxy», но не «y», «xxxxy»
шаблон\{n,m\}
Шаблон встречается не менее n и не более m раз подряд
x\{2,4\}y — «xxy», «xxxy», «xxxxy», но не «xy» или «xxxxxy»
(шабл1|шабл2)
шабл1 или шабл2
([Oo]ne|[Tt]wo) — одно из слов «one», «One», «two», «Two»
При задании явного количества повторений числа n и m могут принимать значения от 0 до 255. Кроме указанных метасимволов возможно применение классов (см.п.1.1). Для указания на начала и конца слова применяются конструкции вида \< и \> соответственно (под словом понимается набор символов строки между разделителями).
Некоторые полезные примеры регулярных выражений:
^[^l] — исключает строки, начинающиеся не с l;
^$ — пустая строка;
^.$ — строка из одного символа;
^…$ — строка из любых трех символов;
^.*$ — строка из любого числа символов;
[a-z][a-z]* — по крайней мере, одна строчная буква;
\<"word"\> — слово word в кавычках;
\<"*word"*\> — слово word в кавычках или без них;
"[^"]" — строка в кавычках;
(1[012]|[1-9]):[0-5][0-9]?(am|pm) — время в формате 7:15am или 07:15pm.
[01]?[09]|2[0-3]:[0-5][0-9] — время в 24-часовом формате c удалением или без лидирующих нолей при указании часов (1:23 или 01:23)
Общий формат команды egrep:
egrep [опции] [шаблон] [файлы] — ищет в указанных файлах строки, соответствующие шаблону. Если имена файлов не заданы, строки ищутся в стандартном вводе. По умолчанию egrep выводит совпадающие строки на стандартный вывод. В качестве шаблона выступают регулярные выражения.
Внимание! Сравнение строк происходит с целым шаблоном, то есть, при указании в качестве шаблона abcd, фактически будет происходить сравнение с регулярным выражением ^abcd$.
Опции команды egrep:
-c — для каждого входного файла вместо обычного вывода печатать количество совпавших строк;
-i — игнорировать регистр символов (как в шаблоне, так и во входящих файлах);
-l — печатать имена файлов, в которых был найден шаблон;
-L — печатать имена файлов, в которых не был найден шаблон;
-n — выводить номера строк и сами строки, соответствующие шаблону;
-r — обрабатывать все файлы каждого каталога рекурсивно;
-v — выводить строки, не соответствующие шаблону;
-x — выводить только те строки, которые полностью совпали с шаблоном;
-w — выводить только те строки, в которых найдено совпадение целого слова с шаблоном.