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

на главную

Жанры

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

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

Шрифт:

# 2) Добавьте обработку различных ключей.

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

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

Утилита agrep

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

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

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

look

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

Пример 12-13. Поиск слов в словаре

#!/bin/bash

# lookup: Выполняется поиск каждого слова из файла в словаре.

file=words.data # Файл с искомыми словами.

echo

while [ "$word" != end ] # Последнее слово в файле.

do

read word # Из файла, потому, что выполнено перенаправление в конце цикла.

look $word > /dev/null # Подавление вывода строк из словаря.

lookup=$? # Код возврата команды 'look'.

if [ "$lookup" -eq 0 ]

then

echo "Слово \"$word\" найдено."

else

echo "Слово \"$word\" не найдено."

fi

done <"$file" # Перенаправление ввода из файла $file, так что "чтение" производится оттуда.

echo

exit 0

# ----------------------------------------------------------------

#

Строки, расположенные ниже не будут исполнены, поскольку выше стоит команда "exit".

# Stephane Chazelas предложил более короткий вариант:

while read word && [[ $word != end ]]

do if look "$word" > /dev/null

then echo "Слово \"$word\" найдено."

else echo "Слово \"$word\" не найдено."

fi

done <"$file"

exit 0

sed, awk

Скриптовые языки, специально разработанные для анализа текстовых данных.

sed

Неинтерактивный "потоковый редактор". Широко используется в сценариях на языке командной оболочки.

awk

Утилита контекстного поиска и преобразования текста, замечательный инструмент для извлечения и/или обработки полей (колонок) в структурированных текстовых файлах. Синтаксис awk напоминает язык C.

wc

wc– - "word count", счетчик слов в файле или в потоке:

bash $ wc /usr/doc/sed-3.02/README

20 127 838 /usr/doc/sed-3.02/README

[20 строк 127 слов 838 символов]

wc -w подсчитывает только слова.

wc -l подсчитывает только строки.

wc -c подсчитывает только символы.

wc -L возвращает длину наибольшей строки.

Подсчет количества .txt– файлов в текущем каталоге с помощью wc:

$ ls *.txt | wc -l

# Эта команда будет работать, если ни в одном из имен файлов "*.txt" нет символа перевода строки.

# Альтернативный вариант:

# find .
– maxdepth 1 -name \*.txt -print0 | grep -cz .

# (shopt -s nullglob; set -- *.txt; echo $#)

# Спасибо S.C.

Подсчет общего размера файлов, чьи имена начинаются с символов, в диапазоне d - h

bash$ wc [d-h]* | grep total | awk '{print $3}'

71832

От переводчика: в случае, если у вас локаль отлична от "C", то вышеприведенная команда может не дать результата, поскольку wc вернет не слово "total", в конце вывода, а "итого". Тогда можно попробовать несколько измененный вариант:

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

Кодекс Крови. Книга VIII

Борзых М.
8. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга VIII

Камень

Минин Станислав
1. Камень
Фантастика:
боевая фантастика
6.80
рейтинг книги
Камень

Партиец

Семин Никита
2. Переломный век
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Партиец

Он тебя не любит(?)

Тоцка Тала
Любовные романы:
современные любовные романы
7.46
рейтинг книги
Он тебя не любит(?)

Бестужев. Служба Государевой Безопасности

Измайлов Сергей
1. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности

Хозяйка брачного агентства или Попаданка в поисках любви

Максонова Мария
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка брачного агентства или Попаданка в поисках любви

Возрождение Феникса. Том 1

Володин Григорий Григорьевич
1. Возрождение Феникса
Фантастика:
фэнтези
попаданцы
альтернативная история
6.79
рейтинг книги
Возрождение Феникса. Том 1

Релокант. Вестник

Ascold Flow
2. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Релокант. Вестник

Книга пяти колец. Том 3

Зайцев Константин
3. Книга пяти колец
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Книга пяти колец. Том 3

Идеальный мир для Лекаря 8

Сапфир Олег
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Идеальный мир для Лекаря 8

Идеальный мир для Социопата 6

Сапфир Олег
6. Социопат
Фантастика:
боевая фантастика
рпг
6.38
рейтинг книги
Идеальный мир для Социопата 6

Камень. Книга 3

Минин Станислав
3. Камень
Фантастика:
фэнтези
боевая фантастика
8.58
рейтинг книги
Камень. Книга 3

Прометей: повелитель стали

Рави Ивар
3. Прометей
Фантастика:
фэнтези
7.05
рейтинг книги
Прометей: повелитель стали

Неудержимый. Книга XIX

Боярский Андрей
19. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIX