Чтение онлайн

на главную - закладки

Жанры

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

Купер Мендель

Шрифт:

#+ и выводятся только распознанные слова.

# =================================================================

# Стандартная проверка входных аргументов

ARGS=1

E_BADARGS=65

E_NOFILE=66

if [ $# -ne $ARGS ]

then

echo "Порядок

использования: `basename $0` filename"

exit $E_BADARGS

fi

if [ !
– f "$1" ] # Проверка наличия файла.

then

echo "Файл \"$1\" не найден."

exit $E_NOFILE

fi

# =================================================================

MINSTRLEN=3 # Минимальная длина строки.

WORDFILE=/usr/share/dict/linux.words # Файл словаря.

# Можно указать иной

#+ файл словаря

#+ в формате -- "одно слово на строке".

wlist=`strings "$1" | tr A-Z a-z | tr '[:space:]' Z | \

tr -cs '[:alpha:]' Z | tr -s '\173-\377' Z | tr Z ' '`

# Трансляция вывода от 'strings' с помощью нескольких 'tr'.

# "tr A-Z a-z" -- перевод в нижний регистр.

# "tr '[:space:]'" -- конвертирует пробелы в символы Z.

# "tr -cs '[:alpha:]' Z" -- конвертирует неалфавитные символы в символы Z,

#+ и удаляет повторяющиеся символы Z.

# "tr -s '\173-\377' Z" -- Конвертирует все символы, с кодами выше 'z' в Z

#+ и удаляет повторяющиеся символы Z,

#+ эта команда удалит все символы, которые не были распознаны предыдущими

#+ командами трансляции (tr).

# Наконец, "tr Z ' '" -- преобразует все символы Z в пробелы,

#+ которые будут рассматриваться в качестве разделителя слов в цикле, приведенном ниже.

# Обратите внимание на технику многоуровневой обработки с помощью 'tr',

#+ каждый раз эта команда вызывается с различным набором аргументов.

for word in $wlist # Важно:

# переменная $wlist не должна заключаться в кавычки.

# "$wlist" --

не сработает.

# Почему?

do

strlen=${#word} # Дина строки.

if [ "$strlen" -lt "$MINSTRLEN" ] # Не рассматривать короткие строки.

then

continue

fi

grep -Fw $word "$WORDFILE" # Проверка слова по словарю.

done

exit 0

Сравнение

diff, patch

diff: очень гибкая утилита сравнения файлов. Она выполняет построчное сравнение файлов. В отдельных случаях, таких как поиск по словарю, может оказаться полезной фильтрация файлов с помощью sort и uniq перед тем как отдать поток данных через конвейер утилите diff. diff file-1 file-2– - выведет строки, имеющие отличия, указывая -- какому файлу, какая строка принадлежит.

С ключом – -side-by-side, команда diff выведет сравниваемые файлы в две колонки, с указанием несовпадающих строк. Ключи – c и – u так же служат для облегчения интерпретации результатов работы diff.

Существует ряд интерфейсных оболочек для утилиты diff, среди них можно назвать: spiff, wdiff, xdiff и mgdiff.

Команда diff возвращает код завершения 0, если сравниваемые файлы идентичны и 1, если они отличаются. Это позволяет использовать diff в условных операторах внутри сценариев на языке командной оболочки (см. ниже).

В общем случае, diff используется для генерации файла различий, который используется как аргумент команды patch. Ключ – e отвечает за вывод файла различий в формате, пригодном для использования с ed или ex.

patch: гибкая утилита для "наложения заплат". С помощью файла различий, сгенерированного утилитой diff, утилита patch может использоваться для обновления устаревших версий файлов. Это позволяет распространять относительно небольшие "diff"-файлы вместо целых пакетов. Распространение "заплат" к ядру стало наиболее предпочтительным методом распространения более новых версий ядра Linux.

patch -p1 <patch-file

# Применит все изменения из 'patch-file'

Поделиться:
Популярные книги

Возвышение Меркурия. Книга 2

Кронос Александр
2. Меркурий
Фантастика:
фэнтези
5.00
рейтинг книги
Возвышение Меркурия. Книга 2

Безымянный раб

Зыков Виталий Валерьевич
1. Дорога домой
Фантастика:
фэнтези
9.31
рейтинг книги
Безымянный раб

Волк 4: Лихие 90-е

Киров Никита
4. Волков
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Волк 4: Лихие 90-е

Кремлевские звезды

Ромов Дмитрий
6. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кремлевские звезды

Газлайтер. Том 4

Володин Григорий
4. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 4

Восход. Солнцев. Книга VIII

Скабер Артемий
8. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга VIII

Кровь и Пламя

Михайлов Дем Алексеевич
7. Изгой
Фантастика:
фэнтези
8.95
рейтинг книги
Кровь и Пламя

Объединитель

Астахов Евгений Евгеньевич
8. Сопряжение
Фантастика:
боевая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Объединитель

Комбинация

Ланцов Михаил Алексеевич
2. Сын Петра
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Комбинация

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Дайте поспать!

Матисов Павел
1. Вечный Сон
Фантастика:
юмористическое фэнтези
постапокалипсис
рпг
5.00
рейтинг книги
Дайте поспать!

Бальмануг. Студентка

Лашина Полина
2. Мир Десяти
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Бальмануг. Студентка

Довлатов. Сонный лекарь

Голд Джон
1. Не вывожу
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Довлатов. Сонный лекарь

Мастер Разума VII

Кронос Александр
7. Мастер Разума
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер Разума VII