Книга: Искусство программирования на языке сценариев командной оболочки
Пример 12-11. Мониторинг системного журнала с помощью tail
Пример 12-11. Мониторинг системного журнала с помощью tail
#!/bin/bash
filename=sys.log
cat /dev/null > $filename; echo "Создание / очистка временного файла."
# Если файл отсутствует, то он создается,
#+ и очищается, если существует.
# : > filename и > filename дают тот же эффект.
tail /var/log/messages > $filename
# Файл /var/log/messages должен быть доступен для чтения.
echo "В файл $filename записаны последние строки из /var/log/messages."
exit 0
См. также Пример 12-4, Пример 12-30 и Пример 29-6.
grep
Многоцелевая поисковая утилита, использующая регулярные выражения. Изначально это была команда в древнем строчном редакторе ed, g/re/p, что означает -- global - regular expression - print.
grep pattern [file...]
Поиск участков текста в файле(ах), соответствующих шаблону pattern, где pattern может быть как обычной строкой, так и регулярным выражением.
bash$ grep '[rst]ystem.$' osinfo.txt
The GPL governs the distribution of the Linux operating system.
Если файл(ы) для поиска не задан, то команда grep работает как фильтр для устройства stdout, например в конвейере.
bash$ ps ax | grep clock
765 tty1 S 0:00 xclock
901 pts/1 S 0:00 grep clock
-i -- выполняется поиск без учета регистра символов.
-w -- поиск совпадений целого слова.
-l -- вывод только имен файлов, в которых найдены участки, совпадающие с заданным образцом/шаблоном, без вывода совпадающих строк.
-r -- (рекурсивный поиск) поиск выполняется в текущем каталоге и всех вложенных подкаталогах.
The -n option lists the matching lines, together with line numbers.
bash$ grep -n Linux osinfo.txt
2:This is a file containing information about Linux.
6:The GPL governs the distribution of the Linux operating system.
-v (или --invert-match) -- выводит только строки, не содержащие совпадений.
grep pattern1 *.txt | grep -v pattern2
# Выводятся строки из "*.txt", совпадающие с "pattern1",
# но ***не*** совпадающие с "pattern2".
-c (--count) -- выводит количество совпадений без вывода самих совпадений.
grep -c txt *.sgml # (количество совпадений с "txt" в "*.sgml" файлах)
# grep -cz .
# ^ точка
# означает подсчет (-c) непустых ("." -- содержащих хотя бы один символ) элементов,
# разделенных нулевыми байтами (-z)
#
printf 'a bnc dnnnnn00n00e0000nf' | grep -cz . # 4
printf 'a bnc dnnnnn00n00e0000nf' | grep -cz '$' # 5
printf 'a bnc dnnnnn00n00e0000nf' | grep -cz '^' # 5
#
printf 'a bnc dnnnnn00n00e0000nf' | grep -c '$' # 9
# По-умолчанию, в качестве разделителя, принимается символ перевода строки (n).
# Обратите внимание: ключ -z характерен для GNU-версии "grep".
# Спасибо S.C.
Если grep вызывается для поиска по группе файлов, то вывод будет содержать указание на имена файлов, в которых найдены совпадения.
bash$ grep Linux osinfo.txt misc.txt
osinfo.txt:This is a file containing information about Linux.
osinfo.txt:The GPL governs the distribution of the Linux operating system.
misc.txt:The Linux operating system is steadily gaining in popularity.
bash$ grep Linux osinfo.txt /dev/null
osinfo.txt:This is a file containing information about Linux.
osinfo.txt:The GPL governs the distribution of the Linux operating system.
Если совпадение было найдено, то grep возвращает код завершения -- 0, это может оказаться полезным при выполнении поиска в условных операторах ( в таких случаях особый интерес может представлять ключ -q, который подавляет вывод).
SUCCESS=0 # если найдено совпадение
word=Linux
filename=data.file
grep -q "$word" "$filename" # "-q" -- подавляет вывод на stdout.
if [ $? -eq $SUCCESS ]
then
echo "Образец $word найден в $filename"
else
echo "Образец $word в файле $filename не найден"
fi
Пример 29-6 -- пример поиска заданного образца в системном журнале, с помощью grep.
- Пример 12-8. Частота встречаемости отдельных слов
- Пример 12-9. Какие из файлов являются сценариями?
- Пример 12-10. Генератор 10-значных случайных чисел
- Пример 12-11. Мониторинг системного журнала с помощью tail
- Пример 12-12. Сценарий-эмулятор "grep"
- Пример 12-13. Поиск слов в словаре
- Пример 12-14. toupper: Преобразование символов в верхний регистр.
- Пример 12-15. lowercase: Изменение имен всех файлов в текущем каталоге в нижний регистр.
- Пример 12-16. du: Преобразование текстового файла из формата DOS в формат UNIX.
- Пример 12-17. rot13: Сверхслабое шифрование по алгоритму rot13.
- Пример 12-18. Более "сложный" шифр
- Пример 12-20. Пример форматирования списка файлов в каталоге
- Пример 12-21. nl: Самонумерующийся сценарий.
- Пример 12-9. Какие из файлов являются сценариями?
- Пример 12-17. rot13: Сверхслабое шифрование по алгоритму rot13.
- Пример установочного скрипта
- Пример из практики
- Повышение производительности приложений с помощью хранимых процедур
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Организация пользователей в группы с помощью ролей
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Мониторинг состояния сервера
- Примеры получения статистики
- Пример применения метода «пять почему»
- Средства мониторинга