Linux и UNIX: программирование в shell. Руководство разработчика
вернуться

Тейнсли Дэвид

Шрифт:

$ grep 'l.*k.' testfile

looks likes

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

$ grep 'ооо*' testfile

looks

Если требуется найти слово, которое стоит в конце строки, воспользуйтесь командой следующего вида:

$ grep 'device$' *

Эта команда ищет во всех файлах текущего каталога строки, завершающиеся словом "device".

8.3. Классы символов

Команда grep поддерживает целый ряд предопределенных диапазонов символов, называемых классами (табл. 8.1). Обозначение класса состоит из открывающей квадратной скобки, двоеточия, собственно имени класса, двоеточия и закрывающей квадратной скобки. Поскольку класс представляет собой диапазон, обозначение класса дополнительно должно заключаться в квадратные скобки.

Таблица 8.1. Основные классы символов и эквивалентные им регулярные выражения

Класс

Эквивалентное регулярное выражение

[:upper:]

[A-Z]

[:lower:]

[a-z]

[:digit:]

[0-9]

[:alnum:]

[0-9a-zA-Z]

[:space:]

символы пробела

[:alpha:]

[a-zA-Z]

Отличие классов от эквивалентных регулярных выражений, приведенных в табл. 8.1, состоит в том, что класс включает не только символы английского алфавита из стандартной таблицы ASCII–кодов, но также символы того национального языка, который установлен в данной конкретной системе.

Рассмотрим несколько примеров на базе нашего файла data.f. Предположим, требуется найти все коды заказов, которые содержат цифру 5, сопровождаемую по крайней мере двумя буквами в верхнем регистре:

$ grep '5[[:upper:]][[:upper]] ' data.f

483 Sept 5АР1996 USP 65.00 LVX2C 189

483 may 5РА1998 USP 37.00 KVM9D 644

Вот как осуществляется поиск всех кодов товара, которые оканчиваются буквой 'P' или 'D':

$ grep '[[:upper:]][[:upper:]][PD]' data.f

483 Sept 5AP1996 USP 65.00 LVX2C 159

219 dec 2CC1999 CAD 23.00 PLV2C 68

484 nov 7PL1996 CAD 49.00 PLV2C 234

483 may 5PA1998 USP 37.00 KVM9D 644

216 sept 3ZL1998 USP 86.00 KVM9E 234

8.4. Дополнительные примеры использования команды grep

В следующих примерах команда grep принимает по каналу результаты работы других команд, фильтруя их надлежащим образом.

8.4.1. Фильтрация списка файлов

Если требуется извлечь из списка файлов текущего каталога только подкаталоги, воспользуйтесь следующей командой:

$ 1s -l | grep '^d'

Представленная ниже команда выбирает из списка файлов текущего каталога, только те записи, которые относятся к файлам, а не к подкаталогам:

S ls -l | grep '^[d]'

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

$ ls -1 | grep '^d.....x..x'

8.4.2. Подавление вывода сообщений об ошибках

Допустим, вы хотите найти запись пользователя louise в системном файле паролей:

$ grep louise /etc/passwd

louise:lxAL6GW9G.ZyY:501:501:Accounts Sect1С:/home/accts/louise:/bin/sh

He исключена возможность, что вы забудете, как называется этот файл. В таком случае воспользуйтесь следующей командой:

$ grep louise /etc/password

grep: /etc/password: No such file or directory

Команда grep выводит сообщение об ошибке, в которой говорится о том, что указанного файла не существует. Можно попробовать провести поиск во всех файлах каталога /etc:

$ grep louise /etc/*

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

В подобной ситуации можно воспользоваться опцией -s, которая подавляет вывод сообщений об ошибках:

  • Читать дальше
  • 1
  • ...
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • ...

Private-Bookers - русскоязычная библиотека для чтения онлайн. Здесь удобно открывать книги с телефона и ПК, возвращаться к сохраненной странице и держать любимые произведения под рукой. Материалы добавляются пользователями; если считаете, что ваши права нарушены, воспользуйтесь формой обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • help@private-bookers.win