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

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

Жанры

UNIX — универсальная среда программирования
Шрифт:
a\
Добавлять строки к выходному потоку, пока одна из них не закончится на
\
b label
Перейти на команду:
label
c\
Заменить строки на последующий текст, как в команде
a
d
Удалить строку; прочесть следующую входную строку
i\
Вставить последующий текст перед
следующим выходным потоком
l
Выдать строку, напечатав все невидимые символы
p
Выдать строку
q
Выйти
r file
Читать
file
, содержимое его переслать в выходной поток
s/old/new/f
Заменить
old
на
new
. Если
f
=
g
, заменить все вхождения;
f
=
p
, вывод;
f
=
w
файл, запись в файл
t label
Проверка: переход на метку, если была замена в текущей строке
w file
Записать строку в файл
y/str1/str2/
Заменить каждый символ строки
str1
на соответствующий символ строки
str2
(диапазоны недопустимы)
=
Выдать текущую нумерацию входной строки
!cmd
Выполнить команду
sed cmd
, только если строка не выбрана
: label
Установить метку для команд
b
и
t
{
Команды до соответствующей скобки
}
рассматривать как группу

Таблица 4.2: Сводка команд

sed

Редактор

sed
удобен потому, что позволяет работать с произвольно длинными входными строками. Это "быстрый" редактор, который сходен с редактором
ed
в интерпретации регулярных выражений и в обработке отдельных строк. Однако, с другой стороны, его возможности запоминания ограничены (трудно запомнить текст от одной строки до другой) — делается только один проход по данным, нельзя двигаться назад, нет способов прямой адресации типа
/.../+1:
и нет средств для работы с числами, т.е. он является чисто текстовым редактором.

Упражнение 4.5

Измените команды

older
и
newer
так, чтобы они не включали файл-аргумент в свой выходной поток. Измените их так, чтобы файлы выдавались в обратном порядке.

Упражнение 4.6

С помощью редактора

sed
сделайте программу
bundle
совершенно надежной. Подсказка: в конструкции "документ здесь" слово, отмечающее конец данных, распознается только в том случае, когда оно совпадает со строкой полностью.

4.4 Язык

awk
поиска и обработки шаблонов

Некоторые ограничения

sed
преодолены в программе
awk
. Принцип работы этой программы сходен с принципом работы программы
sed
, но синтаксически она ближе к языку программирования Си, чем к текстовому редактору. Способ
задания команды такой же, как и для
sed
:

$ awk 'программа' имена_файлов...

но программа другая:

шаблон {действие}

шаблон {действие}

...

Программа

awk
читает входной поток по одной строке из указанных файлов. Строки сопоставляются с шаблонами по порядку; для каждого шаблона, соответствующего строке, выполняется необходимое действие. Как и в редакторе
sed
, входные файлы здесь не изменяются.

Шаблоны могут быть регулярными выражениями в

sed
или более сложными условиями, напоминающими язык Си. Приведем простой пример (такого же результата можно добиться с помощью команды
egrep
):

$ awk '/регулярное_выражение/ {print}' имена_файлов...

Печатается каждая строка, соответствующая регулярному выражению.

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

$ awk '/регулярное_выражение/' имена_файлов...

эквивалентна предыдущей. Наоборот, если отсутствует шаблон, то действие выполняется для каждой входной строки. Следовательно, команда

$ awk '{print}' имена_файлов...

дает те же результаты, что и команда

cat
, хотя действует медленнее.

Теперь перейдем к более интересным примерам, но прежде сделаем одно замечание. Как и в случае

sed
, программу команды
awk
можно получать из файла:

$ awk -f кмд файл имена_файлов...

Поля. В программе

awk
каждая входная строка автоматически разбивается на поля, т.е. последовательности символов без пробелов, разделенные пробелами и символами табуляции. По этому определению выходной поток команды
who
имеет пять полей:

$ who

you tty2 sep 29 11:53

jim tty4 sep 29 11:27

$

Поля обозначаются как

$1
,
$2
, …,
$NF
, где
NF
— переменная, значение которой установлено равным числу полей. В нашем случае
NF=5
для обеих строк. (Учтите разницу между
NF
, числом полей и
$NF
— последним полем строки. В отличие от интерпретатора в программе
awk
только номера полей начинаются с
$
; переменные не имеют такого префикса.) Например, следующая команда выдаст поле "размер файла" из результата выполнения команды
du -а

$ du -a | awk '{print $2}'

а для печати имен пользователей, работающих в системе, и времени входа нужно задать:

$ who awk '{print $1, $5}'

you 11:53

jim 11:27 $

Для печати имени и времени входа в систему, упорядоченных по времени, зададим:

$ who awk '{print $5, $1}' | sort

11:27 jim

11:53 you

$

Это альтернативные решения примеров, приведенных выше в данной главе, в которых использовалась команда

sed
. Хотя с программой
awk
проще работать в подобных случаях, она обычно выполняется медленнее как в начальной фазе, так и при большом входном потоке.

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

– F
(здесь прописная буква). Например, поля в файле паролей
/etc/passwd
разделяются двоеточиями:

$ sed 3q /etc/passwd

root:3D.fHR5KoB.3s:0:1:S.User:/:

ken:y.68wdl.ijayz:6:1:K.Thompson:/usr/ken:

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

Сын Тишайшего

Яманов Александр
1. Царь Федя
Фантастика:
попаданцы
альтернативная история
фэнтези
5.20
рейтинг книги
Сын Тишайшего

"Искажающие реальность" Компиляция. Книги 1-14

Атаманов Михаил Александрович
Искажающие реальность
Фантастика:
боевая фантастика
космическая фантастика
киберпанк
рпг
5.00
рейтинг книги
Искажающие реальность Компиляция. Книги 1-14

Школа. Первый пояс

Игнатов Михаил Павлович
2. Путь
Фантастика:
фэнтези
7.67
рейтинг книги
Школа. Первый пояс

Невеста на откуп

Белецкая Наталья
2. Невеста на откуп
Фантастика:
фэнтези
5.83
рейтинг книги
Невеста на откуп

Убивать чтобы жить 2

Бор Жорж
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 2

Вперед в прошлое!

Ратманов Денис
1. Вперед в прошлое
Фантастика:
попаданцы
5.00
рейтинг книги
Вперед в прошлое!

Аргумент барона Бронина 4

Ковальчук Олег Валентинович
4. Аргумент барона Бронина
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Аргумент барона Бронина 4

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

Измена. Право на обман

Арская Арина
2. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на обман

Бастард Императора. Том 7

Орлов Андрей Юрьевич
7. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 7

Жаба с кошельком

Донцова Дарья
19. Любительница частного сыска Даша Васильева
Детективы:
иронические детективы
8.26
рейтинг книги
Жаба с кошельком

Бастард Императора. Том 11

Орлов Андрей Юрьевич
11. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 11

Академия чаросвет. Тень

Ярошинская Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Академия чаросвет. Тень

Наследие Маозари 4

Панежин Евгений
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наследие Маозари 4