Книга: Искусство программирования на языке сценариев командной оболочки

Пример 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) Добавьте обработку различных ключей.


egrep -- то же самое, что и grep -E. Эта команда использует несколько отличающийся, расширенный набор регулярных выражений, что позволяет выполнять поиск более гибко.

fgrep -- то же самое, что и grep -F. Эта команда выполняет поиск строк символов (не регулярных выражений), что несколько увеличивает скорость поиска.

Утилита agrep имеет более широкие возможности поиска приблизительных совпадений. Образец поиска может отличаться от найденной строки на указанное число символов.


Для поиска по сжатым файлам следует использовать утилиты zgrep, zegrep или zfgrep. Они с успехом могут использоваться и для не сжатых файлов, но в этом случае они уступают в скорости обычным grep, egrep и fgrep. Они очень удобны при выполнении поиска по смешенному набору файлов -- когда одни файлы сжаты, а другие нет.

Для поиска по bzip-файлам используйте bzgrep.

look

Команда look очень похожа на grep, и предназначена для поиска по "словарям" -- отсортированным файлам. По-умолчанию, поиск выполняется в файле /usr/dict/words, но может быть указан и другой словарь.

Оглавление книги


Генерация: 1.236. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз