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

на главную

Жанры

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

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

Шрифт:

# Автор: Stephane Chazelas.

person.new # Очень похоже на объявление класса в C++.

{

local obj_name=$1 name=$2 firstname=$3 birthdate=$4

eval "$obj_name.set_name {

eval \"$obj_name.get_name {

echo \$1

}\"

}"

eval "$obj_name.set_firstname {

eval \"$obj_name.get_firstname {

echo \$1

}\"

}"

eval "$obj_name.set_birthdate {

eval \"$obj_name.get_birthdate {

echo \$1

}\"

eval \"$obj_name.show_birthdate {

echo \$(date -d \"1/1/1970 0:0:\$1 GMT\")

}\"

eval \"$obj_name.get_age {

echo \$(( (\$(date +%s) - \$1) / 3600 / 24 / 365 ))

}\"

}"

$obj_name.set_name $name

$obj_name.set_firstname $firstname

$obj_name.set_birthdate $birthdate

}

echo

person.new self Bozeman Bozo 101272413

#

Создается экземпляр класса "person.new" (фактически -- вызов функции с аргументами).

self.get_firstname # Bozo

self.get_name # Bozeman

self.get_age # 28

self.get_birthdate # 101272413

self.show_birthdate # Sat Mar 17 20:13:33 MST 1973

echo

# typeset -f

# чтобы просмотреть перечень созданных функций.

exit 0

Приложение B. Маленький учебник по Sed и Awk

В этом приложении содержится очень краткое описание приемов работы с утилитами обработки текста sed и awk. Здесь будут рассмотрены лишь несколько базовых команд, которых, в принципе, будет достаточно, чтобы научиться понимать простейшие конструкции sed и awk внутри сценариев на языке командной оболочки.

sed: неинтерактивный редактор текстовых файлов

awk: язык обработки шаблонов с C-подобным синтаксисом

При всех своих различиях, эти две утилиты обладают похожим синтаксисом, они обе умеют работать с регулярными выражениями, обе, по-умолчанию, читают данные с устройства stdin и обе выводят результат обработки на устройство stdout. Обе являются утилитами UNIX-систем, и прекрасно могут взаимодействовать между собой. Вывод от одной может быть перенаправлен, по конвейеру, на вход другой. Их комбинирование придает сценариям, на языке командной оболочки, мощь и гибкость языка Perl.

Одно важное отличие состоит в том, что в случае с sed, сценарий легко может передавать дополнительные аргументы этой утилите, в то время, как в случае с awk (см. Пример 33-3 и Пример 9-22), это более сложная задача .

B.1. Sed

Sed -- это неинтерактивный строчный редактор. Он принимает текст либо с устройства stdin, либо из текстового файла, выполняет некоторые операции над строками и затем выводит результат на устройство stdout или в файл. Как правило, в сценариях, sed используется в конвейерной обработке данных, совместно с другими командами и утилитами.

Sed определяет, по заданному адресному пространству, над какими строками следует выполнить операции [ 66 ] . Адресное пространство строк задается либо их порядковыми номерами, либо шаблоном. Например, команда 3d заставит sed удалить третью строку, а команда /windows/d означает, что все строки, содержащие "windows", должны быть удалены.

Из всего разнообразия операций, мы остановимся на трех, используемых наиболее

часто. Это p– - печать (на stdout), d– - удаление и s– - замена.

66

Если адресное пространство не указано, то, по-умолчанию, к обработке принимаются все строки.

Таблица B-1. Основные операции sed

Операция Название Описание
[диапазон строк]/p print Печать [указанного диапазона строк]
[диапазон строк]/d delete Удалить [указанный диапазон строк]
s/pattern1/pattern2/ substitute Заменить первое встреченное соответствие шаблону pattern1, в строке, на pattern2
[диапазон строк]/s/pattern1/pattern2/ substitute Заменить первое встреченное соответствие шаблону pattern1, на pattern2, в указанном диапазоне строк
[диапазон строк]/y/pattern1/pattern2/ transform заменить любые символы из шаблона pattern1 на соответствующие символы из pattern2, в указанном диапазоне строк (эквивалент команды tr)
g global Операция выполняется над всеми найденными соответствиями внутри каждой из заданных строк

Без оператора g (global), операция замены будет производиться только для первого найденного совпадения, с заданным шаблоном, в каждой строке.

В отдельных случаях, операции sed необходимо заключать в кавычки.

sed -e '/^$/d' $filename

# Ключ -e говорит о том, что далее следует строка, которая должна интерпретироваться

#+ как набор инструкций редактирования.

# (При передаче одной инструкции, ключ "-e" является необязательным.)

# "Строгие" кавычки ('') предотвращают интерпретацию символов регулярного выражения,

#+ как специальных символов, командным интерпретатором.

#

# Действия производятся над строками, содержащимися в файле $filename.

В отдельных случаях, команды редактирования не работают в одиночных кавычках.

filename=file1.txt

pattern=BEGIN

sed "/^$pattern/d" "$filename" # Результат вполне предсказуем.

# sed '/^$pattern/d' "$filename" дает иной результат.

# В данном случае, в "строгих" кавычках (' ... '),

#+ не происходит подстановки значения переменной "$pattern".

Sed использует ключ -e для того, чтобы определить, что следующая строка является инструкцией, или набором инструкций, редактирования. Если инструкция является единственной, то использование этого ключа не является обязательным.

sed -n '/xzy/p' $filename

# Ключ -n заставляет sed вывести только те строки, которые совпадают с указанным шаблоном.

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

Курсант: Назад в СССР 10

Дамиров Рафаэль
10. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 10

Сумеречный Стрелок 2

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

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

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

Новик

Ланцов Михаил Алексеевич
2. Помещик
Фантастика:
альтернативная история
6.67
рейтинг книги
Новик

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

INDIGO
16. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 3

Метатель

Тарасов Ник
1. Метатель
Фантастика:
боевая фантастика
попаданцы
рпг
фэнтези
фантастика: прочее
постапокалипсис
5.00
рейтинг книги
Метатель

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

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

Кротовский, вы сдурели

Парсиев Дмитрий
4. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
рпг
5.00
рейтинг книги
Кротовский, вы сдурели

Книга 5. Империя на марше

Тамбовский Сергей
5. Империя у края
Фантастика:
альтернативная история
5.00
рейтинг книги
Книга 5. Империя на марше

Книга пятая: Древний

Злобин Михаил
5. О чем молчат могилы
Фантастика:
фэнтези
городское фэнтези
мистика
7.68
рейтинг книги
Книга пятая: Древний

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

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

Ну привет, заучка...

Зайцева Мария
Любовные романы:
эро литература
короткие любовные романы
8.30
рейтинг книги
Ну привет, заучка...

Ваше Сиятельство 3

Моури Эрли
3. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 3

Последний попаданец 8

Зубов Константин
8. Последний попаданец
Фантастика:
юмористическая фантастика
рпг
5.00
рейтинг книги
Последний попаданец 8