Ни имя команды, ни ее аббревиатура (“
General Regular Expression Parser” - синтаксический анализатор общих регулярных выражений) не слишком интуитивны, но ее действие и ее использование довольно просты для понимания:
grep выполняет поиск в одном или нескольких файлах по шаблону, заданному в качестве аргумента. Ее синтаксис:
grep [опции] <шаблон> [один или более файлов]
|
Если указано несколько файлов, в отображаемом результате их имена будут выводиться перед каждой найденной строкой. Для предотвращения вывода этих имен используйте опцию
-h; используйте опцию
-l для вывода только имен файлов с найденными совпадениями. Шаблон - это регулярное выражение, хотя в большинстве случаев он состоит просто из одного слова. Наиболее часто используемые опции:
- -i: поиск без учета регистра (т.е. игнорирование разницы между верхним и нижним регистром);
- -v: обратный поиск. Вывод строк, которые не соответствуют шаблону;
- -n: вывод номера строки для каждой из найденных строк;
- -w: сообщает grep'у, что шаблон должен совпадать со всем словом.
Итак, давайте теперь вернемся к анализу лог-файла почтового демона. Нам необходимо найти все строки в файле
/var/log/mail/info, содержащие шаблон “
postfix”. Для этого мы вводим такую команду:
# grep postfix /var/log/mail/info
|
Команда
grep может быть использована в канале. Так мы можем получить такой же результат, что и в предыдущем примере, при помощи следующего:
# cat /var/log/mail/info | grep postfix
|
Если нам нужно найти все строки, не содержащие шаблона “
postfix”, нам надо будет воспользоваться опцией
-v:
# grep -v postfix /var/log/mail/info
|
Давайте предположим, что нам необходимо найти все сообщения об успешно отправленных письмах. В этом случае мы должны отфильтровать все строки, добавленные почтовым демоном в файл журнала (содержащие шаблон “
postfix”), и они должны содержать сообщение об успешной отправке (“
status=sent”):
# grep postfix /var/log/mail/info |grep status=sent
|
В этом случае команда
grep использована дважды. Это разрешается, но не совсем красиво. Мы можем получить тот же результат при помощи утилиты
fgrep. Сначала нам нужно создать файл, содержащий шаблоны, записанные в столбик. Такой файл может быть создан следующим образом (мы используем
patterns.txt в качестве имени файла):
# echo -e 'status=sent\npostfix' >./patterns.txt
|
Затем мы вызываем следующую команду, в которой мы используем файл
patterns.txt со списком шаблонов и утилиту
fgrep вместо “
двойного вызова” команды
grep:
# fgrep -f ./patterns.txt /var/log/mail/info
|
Файл
./patterns.txt может содержать сколько угодно шаблонов. Каждый из них должен быть введен в виде одной строки. Например, для выборки сообщений о письмах, успешно отправленных на адрес
peter@mandrakesoft.com, достаточно будет добавить адрес этого электронного ящика в наш файл
./patterns.txt, выполнив следующую команду:
# echo 'peter@mandrakesoft.com' >>./patterns.txt
|
Понятное дело, что вы можете комбиноровать команду
grep с
tail и
head. Если нам нужно найти сообщения о предпоследнем электроном письме, отправленном на адрес
peter@mandrakesoft.com, мы используем:
# fgrep -f ./patterns.txt /var/log/mail/info | tail -n2 | head -n1
|
Здесь мы применили описанный выше фильтр и отправили результат через канал в команды
tail и
head. Они выбрали из данных предпоследнее значение.
wc: Подсчёт элементов в файлах
Команда
wc (
Word Count - подсчёт слов) используется для подсчёта числа строк и слов в файлах. Она также полезна для подсчёта байтов, символов и длины самой длинной строки. Её синтаксис:
Список полезных опций:
- -l: вывод количества новых строк;
- -w: вывод количества слов;
- -m: вывод общего количества символов;
- -c: вывод количества байт;
- -L: вывод длины самой длинной строки в заданном тексте.
По умолчанию команда
wc выводит количество новых строк, слов и символов. Вот несколько примеров использования:
Если нам нужно определить число пользователей в нашей системе, мы можем ввести:
Если нам нужно узнать число
CPU в нашей системе, мы пишем:
$grep "model name" /proc/cpuinfo |wc -l
|
В предыдущем разделе мы получили список сообщений об успешно отправленных письмах на адреса, перечисленные в нашем файле
./patterns.txt. Если нам нужно узнать количество таких сообщений, мы можем перенаправить наш отфильтрованный результат через канал в команду
wc:
# fgrep -f ./patterns.txt /var/log/mail/info | wc -l
Комментариев нет:
Отправить комментарий