Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

– rwxr-xr-x 1 rick rick 504 Feb 8 18:43 ./_trap

$

Как видите, команда

find
чрезвычайно полезна; она только требует небольшой практики для умелого ее применения. И такая практика, как и эксперименты с командой
find
, обязательно принесет дивиденды.

Команда grep

Вторая очень полезная команда, заслуживающая рассмотрения, — это команда

grep
. Необычное имя, означающее общий синтаксический анализатор регулярных выражений (general regular expression parser). Вы применяете команду
find
для поиска файлов в вашей системе, а команду
grep
для поиска строк в ваших файлах. Действительно, очень часто при использовании команды
find
команда
grep
передается после аргумента
– exec
.

Команда

grep
принимает опции, шаблон соответствия и файлы для поиска:

grep [опции] шаблон [файлы]

Если имена файлов не заданы, команда анализирует стандартный ввод.

Давайте начнем с изучения основных опций команды

grep
. И на этот раз в табл. 2.14 приведены только самые важные из них; полный список см. на страницах интерактивного справочного руководства.

Таблица 2.14

Опция Описание
– с
Вместо вывода на экран совпавших с шаблоном строк выводит их количество
– E
Включает расширенные регулярные выражения
– h
Ужимает обычное начало каждой строки вывода за счет удаления имени файла, в котором строка найдена
– i
Не учитывает регистр букв
– l
Перечисляет имена файлов со строками, совпадающими с шаблоном; не выводит сами найденные строки
– v
Меняет шаблон соответствия для выбора вместо строк, соответствующих шаблону, несовпадающих с ним строк

Выполните упражнение 2.17.

Упражнение 2.17. Основной вариант использования команды
grep

Посмотрим команду

grep
в действии на примерах простых шаблонов.

$ grep in words.txt

When shall we three meet again. In thunder, lightning, or in rain?

I come, Graymalkin!

$ grep -c in words.txt words2.txt

words.txt:2 words2.txt:14

$ grep -c -v in words.txt words2.txt

words.txt:9

words2.txt:16$

Как это работает

В первом примере нет опций; в нем просто ищется строка

in
в файле words.txt и выводятся на экран любые строки, соответствующие условию поиска. Имя файла не отображается, поскольку поиск велся в единственном файле.

Во втором примере в двух разных файлах подсчитывается количество строк, соответствующих шаблону. В этом случае имена файлов выводятся на экран.

В заключение применяется опция

– v
для инвертирования критерия поиска и подсчета строк, не совпадающих с шаблоном.

Регулярные выражения

Как вы убедились, основной вариант применения команды grep легко усвоить. Теперь пришло время рассмотреть основы построения регулярных выражений, которые позволят вам выполнять более сложный поиск. Как упоминалось ранее в этой главе, регулярные выражения применяются в системе Linux и многих языках программирования с открытым исходным кодом. Вы можете использовать их в редакторе vi и в скриптах на языке Perl, применяя одни и те же принципы, общие для регулярных выражений, где бы они ни появлялись.

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

Таблица 2.15

Символ Описание
^
Привязка к началу строки
$
Привязка к концу строки
.
Любой одиночный символ
[]
В квадратных скобках содержится диапазон символов, с любым из них возможно совпадение, например, диапазон символов
a-e
или инвертированный диапазон, перед которым стоит символ
^

Если вы хотите использовать любые из перечисленных символов как "обычные", поставьте перед ними символ

\
. Например, если нужно найти символ
$
, просто введите
\$
.

Есть также несколько полезных специальных проверочных шаблонов, которые могут указываться в квадратных скобках (табл. 2.16).

Таблица 2.16

Проверочный шаблон Описание
[:alnum:]
Буквенно-цифровые символы
[:alpha:]
Буквы
[:ascii:]
Символы таблицы ASCII
[:blank:]
Пробел или табуляция
[:cntrl:]
Управляющие символы ASCII
[:digit:]
Цифры
[:graph:]
Неуправляющие и непробельные символы
[:lower:]
Строчные буквы
[:print:]
Печатные символы
[:punct:]
Знаки пунктуации
[:space:]
Пробельные символы, включая вертикальную табуляцию
[:upper:]
Прописные буквы
[:xdigit:]
Шестнадцатиричные цифры

Кроме того, если задана опция

=E
для расширенного соответствия, за регулярным выражением могут следовать и другие символы, управляющие выполнением проверки на соответствие шаблону (табл. 2.17). В команде
grep
перед этими символами необходимо вводить символ
\
.

Таблица 2.17

Опция  Описание
?
Совпадение не обязательно, но возможно не более одного раза
*
Совпадения может не быть, оно может быть однократным или многократным
+
Совпадение должно быть однократным или многократным
{n}
Совпадение должно быть 
n
раз
{n, }
Совпадение должно быть
n
раз и больше
{n, m}
Совпадение должно быть от
n
до
m
раз включительно

Все это выглядит немного запутанно, но если осваивать все возможности постепенно, то вы увидите, что все не так сложно, как кажется на первый взгляд. Самый легкий способ понять регулярные выражения — просто попробовать применить несколько.

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

$
:

$ grep e$ words2.txt

Art thou not, fatal vision, sensible

Поделиться:
Популярные книги

Ученик. Книга 4

Первухин Андрей Евгеньевич
4. Ученик
Фантастика:
фэнтези
5.67
рейтинг книги
Ученик. Книга 4

Гримуар темного лорда V

Грехов Тимофей
5. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда V

Третий. Том 6

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
фантастика: прочее
попаданцы
5.00
рейтинг книги
Третий. Том 6

Кукловод

Майерс Александр
4. Династия
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кукловод

Я до сих пор князь. Книга XXII

Дрейк Сириус
22. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор князь. Книга XXII

Седьмая встреча

Вассму Хербьёрг
Проза:
современная проза
4.00
рейтинг книги
Седьмая встреча

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

Кодекс Крови. Книга VIII

Борзых М.
8. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VIII

Локки 7. Потомок бога

Решетов Евгений Валерьевич
7. Локки
Фантастика:
аниме
эпическая фантастика
фэнтези
5.00
рейтинг книги
Локки 7. Потомок бога

Когда он был порочным

Куин Джулия
6. Бриджертоны
Любовные романы:
исторические любовные романы
8.85
рейтинг книги
Когда он был порочным

Лед тронулся, тренер! Но что делать со стояком? Том 2

Некрасов Игорь
2. Ледовая Корона
Любовные романы:
эро литература
5.00
рейтинг книги
Лед тронулся, тренер! Но что делать со стояком? Том 2

Играть... в тебя

Зайцева Мария
3. Звериные повадки Симоновых
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Играть... в тебя

Телохранитель Генсека. Том 1

Алмазный Петр
1. Медведев
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Телохранитель Генсека. Том 1

Неучтенный элемент. Том 1

NikL
1. Антимаг. Вне системы
Фантастика:
городское фэнтези
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 1