Книга: Искусство программирования на языке сценариев командной оболочки
Пример 12-12. Сценарий-эмулятор "grep"
Пример 12-12. Сценарий-эмулятор "grep"
#!/bin/bash
# grp.sh: Очень "грубая" реализация 'grep'.
E_BADARGS=65
if [ -z "$1" ] # Проверка наличия аргументов.
then
echo "Порядок использования: `basename $0` pattern"
exit $E_BADARGS
fi
echo
for file in * # Обход всех файлов в $PWD.
do
output=$(sed -n /"$1"/p $file) # Подстановка команд.
if [ ! -z "$output" ] # Что произойдет, если кавычки вокруг "$output" убрать?
then
echo -n "$file: "
echo $output
fi # эквивалент: sed -ne "/$1/s|^|${file}: |p"
echo
done
echo
exit 0
# Упражнения:
# ---------
# 1) Добавьте вывод символов перевода строки, если найдено более одного совпадения в любом из файлов.
# 2) Добавьте обработку различных ключей.
fgrep -- то же самое, что и grep -F. Эта команда выполняет поиск строк символов (не регулярных выражений), что несколько увеличивает скорость поиска.
Утилита agrep имеет более широкие возможности поиска приблизительных совпадений. Образец поиска может отличаться от найденной строки на указанное число символов.
Для поиска по bzip-файлам используйте bzgrep.
look
Команда look очень похожа на grep, и предназначена для поиска по "словарям" -- отсортированным файлам. По-умолчанию, поиск выполняется в файле /usr/dict/words, но может быть указан и другой словарь.
- Пример 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: Самонумерующийся сценарий.
- Пример установочного скрипта
- Пример из практики
- Восстановление "безнадежных" баз данных. InterBase Surgeon
- Основные "рычаги" управления производительностью
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Примеры получения статистики
- Пример применения метода «пять почему»
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы
- Using Double Quotes to Resolve Variables in Strings with Embedded Spaces
- Пример 17-10. Блочный комментарий
- Примеры