forked from emulek/sed
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ch03.html
93 lines (93 loc) · 32.1 KB
/
ch03.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Глава 3. man sed (русский перевод)</title><link rel="stylesheet" href="chs/default.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.75.1"><link rel="home" href="index.html" title="Краткий учебник по sed."><link rel="up" href="index.html" title="Краткий учебник по sed."><link rel="prev" href="ch02s06.html" title="Что нового в версии 4.2 по сравнению с 4.1.5?"><link rel="next" href="ch04.html" title="Глава 4. Примеры скриптов."></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Глава 3. man sed (русский перевод)</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s06.html">Пред.</a> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <a accesskey="n" href="ch04.html">След.</a></td></tr></table><hr></div><div class="chapter" title="Глава 3. man sed (русский перевод)"><div class="titlepage"><div><div><h2 class="title"><a name="id2516622"></a>Глава 3. man sed (русский перевод)</h2></div></div></div><div class="toc"><p><b>Содержание</b></p><dl><dt><span class="section"><a href="ch03.html#id2516629">Утилита sed, версия 4.0.9</a></span></dt><dd><dl><dt><span class="section"><a href="ch03.html#id2516640">SYNOPSIS</a></span></dt><dt><span class="section"><a href="ch03.html#id2516655">Описание</a></span></dt><dt><span class="section"><a href="ch03.html#id2516684">Опции командной строки</a></span></dt><dt><span class="section"><a href="ch03.html#id2516860">Описание sed-команд</a></span></dt><dt><span class="section"><a href="ch03.html#id2517541">Адресация</a></span></dt><dt><span class="section"><a href="ch03.html#id2517853">Регулярные выражения</a></span></dt><dt><span class="section"><a href="ch03.html#id2517869">Ошибки</a></span></dt><dt><span class="section"><a href="ch03.html#id2517920">COPYRIGHT</a></span></dt><dt><span class="section"><a href="ch03.html#id2517941">Ссылки</a></span></dt></dl></dd></dl></div><div class="section" title="Утилита sed, версия 4.0.9"><div class="titlepage"><div><div><h3 class="title"><a name="id2516629"></a>Утилита sed, версия 4.0.9</h3></div></div></div><div class="note" title="Замечание" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Замечание</h3>Данная глава представляет собой полный перевод man-страницы.</div><div class="section" title="SYNOPSIS"><div class="titlepage"><div><div><h4 class="title"><a name="id2516640"></a>SYNOPSIS</h4></div></div></div><span class="command"><strong>sed</strong></span> [<code class="option">опции</code>]... {только-скрипт-если-нет-других-скриптов} [файл(ы)]...
</div><div class="section" title="Описание"><div class="titlepage"><div><div><h4 class="title"><a name="id2516655"></a>Описание</h4></div></div></div>
Sed это потоковый редактор. Потоковый редактор используется для базовых изменений текста в виде входящего потока (из файла, или из входного pipe потока). Команды sed чуть менее чем полностью позаимствованные из древнего текстового редактора <span class="command"><strong>ed</strong></span>. Sed обрабатывает текстовые строки и сам текст исключительно за один проход. Sed может использоваться как фильтр, для обработки текстов созданных другими текстовыми редакторами, а так-же для фильтрации и обработки текстовых данных выводимых другими утилитами.
</div><div class="section" title="Опции командной строки"><div class="titlepage"><div><div><h4 class="title"><a name="id2516684"></a>Опции командной строки</h4></div></div></div><div class="variablelist"><dl><dt><span class="term"><code class="option">-n, --quiet, --silent</code></span></dt><dd>
Подавление автоматического вывода буфера после обработки.
</dd><dt><span class="term"><code class="option">-e script, --expression=script</code></span></dt><dd>
Добавить sed-скрипт для обработки.
</dd><dt><span class="term"><code class="option">-f script-file, --file=script-file</code></span></dt><dd>
Добавить для обработки содержимое файла (файл будет обрабатываться как sed-скрипт).
</dd><dt><span class="term"><code class="option">-i[suffix], --in-place[=suffix]</code></span></dt><dd>
Редактирование файла на месте. (возможно создание резервной копии, если используется суффикс).
</dd><dt><span class="term"><code class="option">-l N, --line-length=N</code></span></dt><dd>
Задаёт значение для обрезки строк командой <span class="command"><strong>l</strong></span>.
</dd><dt><span class="term"><code class="option">-r, --regexp-extended</code></span></dt><dd>
Использование расширенных регулярных выражений в sed-скрипте.
</dd><dt><span class="term"><code class="option">-s, --separate</code></span></dt><dd>
Сепаратор. Разделение потока на отдельные файлы, по умолчанию sed считает все входящие файлы как один длинный поток, а с этой опцией файлы разделены (например, для каждого файла первая строка будет именно первой, а адрес $ будет совпадать с каждой последней строкой, а не только с последней строкой последнего файла).
</dd><dt><span class="term"><code class="option">-u, --unbuffered</code></span></dt><dd>
Использование минимально возможного размера буферов.
</dd><dt><span class="term"><code class="option">--help</code></span></dt><dd>
Показать краткую справку и выйти.
</dd><dt><span class="term"><code class="option">-V, --version</code></span></dt><dd>
Показать номер версии и выйти.
</dd></dl></div>
Если не применяются опции <code class="option">-e, --expression, -f, или --file</code>, тогда первый аргумент не являющийся опцией интерпретируется как sed-скрипт. Все остальные аргументы интерпретируются как входящие файлы. Если файл для обработки не задан, sed читает данные из входного потока.
</div><div class="section" title="Описание sed-команд"><div class="titlepage"><div><div><h4 class="title"><a name="id2516860"></a>Описание sed-команд</h4></div></div></div>
Это краткое описание команд. Оно предназначено для тех, кто уже знаком с работой этого редактора. Для изучения полного описания команд, смотрите sed info.
<div class="section" title="Безадресные команды"><div class="titlepage"><div><div><h5 class="title"><a name="id2516874"></a>Безадресные команды</h5></div></div></div><div class="variablelist"><dl><dt><span class="term"><span class="command"><strong>:</strong></span> label</span></dt><dd>
Эта команда задаёт метку, для перехода к ней командами <span class="command"><strong>b</strong></span>, <span class="command"><strong>t</strong></span>, и <span class="command"><strong>T</strong></span>.
</dd><dt><span class="term"><span class="command"><strong>#</strong></span>comment</span></dt><dd>
Комментарий, который продолжается до конца строки (или до конца фрагмента скрипта в опции <code class="option">-e</code>).
</dd><dt><span class="term"><span class="command"><strong>}</strong></span></span></dt><dd>
Завершение блока команд {...}.
</dd></dl></div></div><div class="section" title="Команды которые используются с одним адресом или без адреса"><div class="titlepage"><div><div><h5 class="title"><a name="id2516939"></a>Команды которые используются с одним адресом или без адреса</h5></div></div></div><div class="variablelist"><dl><dt><span class="term"><span class="command"><strong>=</strong></span></span></dt><dd>Вывод в выходной поток номера текущей строки.</dd><dt><span class="term"><span class="command"><strong>a</strong></span> text</span></dt><dd>Вывод в выходной поток text'а, <span class="emphasis"><em>после</em></span> вывода обработанного буфера. Можно вывести несколько строк, если в конце каждой строки добавить обратный слеш '\'.</dd><dt><span class="term"><span class="command"><strong>i</strong></span> text</span></dt><dd>Так-же как <span class="command"><strong>a</strong></span>, но text выводится <span class="emphasis"><em>перед</em></span> буфером.</dd><dt><span class="term"><span class="command"><strong>q</strong></span></span></dt><dd>Выход из скрипта. При этом больше никаких данных не читается из входного потока. Если разрешён вывод буфера, то он выводится в выходной поток.</dd><dt><span class="term"><span class="command"><strong>Q</strong></span></span></dt><dd>Так-же как <span class="command"><strong>q</strong></span>, но буфер не выводится.</dd><dt><span class="term"><span class="command"><strong>r</strong></span> <span class="emphasis"><em>file</em></span></span></dt><dd>Добавляет к выводу текст прочитанный из <span class="emphasis"><em>file</em></span>.</dd><dt><span class="term"><span class="command"><strong>R</strong></span> <span class="emphasis"><em>file</em></span></span></dt><dd>Добавляет к выводу одну строку прочитанную из <span class="emphasis"><em>file</em></span>.</dd></dl></div></div><div class="section" title="Команды, которые можно использовать с диапазоном адресов."><div class="titlepage"><div><div><h5 class="title"><a name="id2517066"></a>Команды, которые можно использовать с диапазоном адресов.</h5></div></div></div><div class="variablelist"><dl><dt><span class="term"><span class="command"><strong>{</strong></span></span></dt><dd>Начала блока команд. (В конце блока ставится <span class="command"><strong>}</strong></span>).</dd><dt><span class="term"><span class="command"><strong>b</strong></span> <span class="emphasis"><em>label</em></span></span></dt><dd>Переход на метку <span class="emphasis"><em>label</em></span>. Если такой метка не задана, то переход выполняется в конец скрипта.</dd><dt><span class="term"><span class="command"><strong>t</strong></span> <span class="emphasis"><em>label</em></span></span></dt><dd>
Если команда <span class="command"><strong>s///</strong></span> произвела успешный поиск и замену последней прочитанной строки, то эта команда передаёт управление на метку <span class="emphasis"><em>label</em></span>. Если метка не задана, переход осуществляется в конец скрипта.
<div class="note" title="Замечание" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Замечание</h3>
Если перед <span class="command"><strong>t</strong></span> выполнилось несколько команд <span class="command"><strong>s///</strong></span>, то переход будет выполнятся в зависимости от результата работы первой команды <span class="command"><strong>s///</strong></span>. Для сброса флага используйте ещё одну команду перехода, например:
<pre class="programlisting">
# эта команда находит и заменяет всегда (т.к. у любой строки есть начало).
s/^/BEGIN:/
# для сброса флага перехода, мы осуществляем переход на метку lb
t lb
:lb
# а эта команда не всегда меняет (т.к. не во всех строках есть буква Z)
s/Z/z/
# сл. переход выполнится только для строчек, в которых была буква Z, которая поменялась на z.
t is_z
</pre></div></dd><dt><span class="term"><span class="command"><strong>T</strong></span> <span class="emphasis"><em>label</em></span></span></dt><dd>Так-же как <span class="command"><strong>t</strong></span>, но переход выполняется если замены не было.</dd><dt><span class="term"><span class="command"><strong>c</strong></span> <span class="emphasis"><em>text</em></span></span></dt><dd>Так-же как <span class="command"><strong>a</strong></span>, но текст выводится <span class="emphasis"><em>вместо</em></span> вывода буфера.</dd><dt><span class="term"><span class="command"><strong>d</strong></span></span></dt><dd>
Удаление буфера. Начало нового цикла.
<div class="note" title="Замечание" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Замечание</h3>
Тут не всё так просто: эта единственная команда (не считая <span class="command"><strong>D</strong></span>), которая осуществляет неявный переход к выполнению нового цикла - после обработки этой команды, все последующие команды не выполняются, а содержимое буфера никогда не выводится в выходной поток.
</div></dd><dt><span class="term"><span class="command"><strong>D</strong></span></span></dt><dd>Эта команда выполняется следующим образом:
<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">Сначала из буфера удаляются первые символы до символа '\n' включительно, если такой символ есть. (если нет - удаляются все символы)</li><li class="listitem">В случае, если в строке остались символы, работа скрипта прерывается, и выполняется переход к началу скрипта. При этом символы не читаются из входного потока, а остаются те, что остались после п1.</li><li class="listitem">Если в буфере нет символов (после удаления в п1), то выполнение скрипта так-же прерывается, но после этого происходит загрузка новой строки из входного потока в буфер. В этом случае, выполнение эквивалентно команде <span class="command"><strong>d</strong></span>.</li></ol></div></dd><dt><span class="term"><span class="command"><strong>h H</strong></span></span></dt><dd>Копирование/добавление буфера в/к области удержания.</dd><dt><span class="term"><span class="command"><strong>g G</strong></span></span></dt><dd>Копирование/добавление области удержания в/к буферу.</dd><dt><span class="term"><span class="command"><strong>x</strong></span></span></dt><dd>Обмен содержимого буфера и области удержания.</dd><dt><span class="term"><span class="command"><strong>l</strong></span></span></dt><dd>Вывод текущей строки в читаемом виде (visually unambiguous).</dd><dt><span class="term"><span class="command"><strong>n N</strong></span></span></dt><dd>Чтение строки из входного потока, и копирование/добавление её в буфер. Если строка добавляется (команда <span class="command"><strong>N</strong></span>), то новая строка отделяется от старой символом '\n'.</dd><dt><span class="term"><span class="command"><strong>p</strong></span></span></dt><dd>Вывод буфера в выходной поток.</dd><dt><span class="term"><span class="command"><strong>P</strong></span></span></dt><dd>Вывод первых символов до '\n' в выходной поток.</dd><dt><span class="term"><span class="command"><strong>s</strong></span>/<span class="emphasis"><em>regexp</em></span>/<span class="emphasis"><em>replacement</em></span>/</span></dt><dd>Поиск регулярного выражения <span class="emphasis"><em>regexp</em></span> в буфере. Если такое выражение будет найдено, то оно меняется на <span class="emphasis"><em>replacement</em></span>. Выражение для замены <span class="emphasis"><em>replacement</em></span> может содержать специальный символ <span class="emphasis"><em>&</em></span>, который подменяется на найденную подстроку. Кроме того, <span class="emphasis"><em>replacement</em></span> может содержать обратные ссылки (\1, \2, \3 ... \9), которые ссылаются на подвыражения в <span class="emphasis"><em>regexp</em></span>.
<div class="note" title="Замечание" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Замечание</h3>
про \0: это вполне рабочая ссылка, и она эквивалентна &. На самом деле, я использую \0 по той причине, что ампресанд не лепится в формат DOCBOOK. Следует учитывать, что \0 <span class="emphasis"><em>нестандартная конструкция</em></span>, хотя она и работает во всех известных мне реализациях sed.
</div></dd><dt><span class="term"><span class="command"><strong>w</strong></span> <span class="emphasis"><em>filename</em></span></span></dt><dd>Запись буфера в файл <span class="emphasis"><em>filename</em></span>.</dd><dt><span class="term"><span class="command"><strong>W</strong></span> <span class="emphasis"><em>filename</em></span></span></dt><dd>Запись первой строки из буфера в файл <span class="emphasis"><em>filename</em></span>.</dd><dt><span class="term"><span class="command"><strong>y</strong></span>/<span class="emphasis"><em>source</em></span>/<span class="emphasis"><em>dest</em></span>/</span></dt><dd>Транслитерация символов в буфере. Заменяются символы из списка <span class="emphasis"><em>source</em></span> на символы в списке <span class="emphasis"><em>dest</em></span>.</dd></dl></div></div></div><div class="section" title="Адресация"><div class="titlepage"><div><div><h4 class="title"><a name="id2517541"></a>Адресация</h4></div></div></div><p>
Sed команды могут использоваться без адреса, в этом случае, команда проверяет все строки входящего текста. Так-же команда может использоваться с одним адресом, тогда команда выполнится только для тех строк, которые совпадают с адресом. Кроме того, в качестве адреса можно использовать диапазон <span class="emphasis"><em>adr1</em></span>,<span class="emphasis"><em>adr2</em></span>. При этом команда будет обрабатывать все строки начиная с той, которая совпадает с <span class="emphasis"><em>adr1</em></span> и заканчивая той, с которой совпадает <span class="emphasis"><em>adr2</em></span>. Если в качестве <span class="emphasis"><em>adr2</em></span> используется регулярное выражение, то оно не будет проверятся в первой строке диапазона (в первой строке совпадающей с <span class="emphasis"><em>adr1</em></span>).
</p><p>
После адреса (или адресного диапазона), и перед командой, можно поставить <span class="command"><strong>!</strong></span>, который приведёт к инвертированию адреса (команда выполнится для всех строк <span class="emphasis"><em>кроме</em></span> той, что совпадает с адресом или с адресным диапазоном).
</p><p>
Поддерживаемые типы адресных выражений:
</p><div class="variablelist"><dl><dt><span class="term"><span class="emphasis"><em>number</em></span></span></dt><dd>Совпадает только со строкой с номером <span class="emphasis"><em>number</em></span>.</dd><dt><span class="term"><span class="emphasis"><em>first</em></span>~<span class="emphasis"><em>step</em></span></span></dt><dd>
Совпадает со строками начиная с <span class="emphasis"><em>first</em></span>, с шагом <span class="emphasis"><em>step</em></span>. Например
<pre class="programlisting">sed -n '1~2p'</pre>
выведет только нечётные строки. Адресное выражение 2~5 совпадает с каждой пятой строкой начиная со второй (2,7,12,17...). (Это GNU расширение).
</dd><dt><span class="term"><span class="emphasis"><em>$</em></span></span></dt><dd>Совпадает с последней строкой последнего файла (или с последней строкой каждого файла при использовании опции <code class="option">-s</code>).</dd><dt><span class="term">/<span class="emphasis"><em>regexp</em></span>/</span></dt><dd>Совпадает со строкой, в которой найдётся выражение <span class="emphasis"><em>regexp</em></span>.</dd><dt><span class="term">\<span class="command"><strong>c</strong></span><span class="emphasis"><em>regexp</em></span><span class="command"><strong>c</strong></span></span></dt><dd>Совпадает со строкой, в которой найдётся выражение <span class="emphasis"><em>regexp</em></span>. (<span class="command"><strong>c</strong></span> может быть любым символом.)</dd></dl></div><p>
</p><p>
GNU sed поддерживает несколько специальных диапазонов адресов:
</p><div class="variablelist"><dl><dt><span class="term">0,<span class="emphasis"><em>adr2</em></span></span></dt><dd>Этот диапазон работает в точности так же как 1,<span class="emphasis"><em>adr2</em></span>, в случае если самая первая строка не совпадает с <span class="emphasis"><em>adr2</em></span>. Если первая строка совпадает с <span class="emphasis"><em>adr2</em></span>, то весь диапазон совпадает только с этой строкой (выражение 1,<span class="emphasis"><em>adr2</em></span> совпадает со строками начиная с первой, и далее для всех, до строки совпадающей с <span class="emphasis"><em>adr2</em></span>, при этом проверяются строки начиная со второй, первая не проверяется).</dd><dt><span class="term"><span class="emphasis"><em>adr1</em></span>,+<span class="emphasis"><em>N</em></span></span></dt><dd>Совпадает со строкой <span class="emphasis"><em>adr1</em></span> и ещё с <span class="emphasis"><em>N</em></span> строками после неё.</dd><dt><span class="term"><span class="emphasis"><em>adr1</em></span>,~<span class="emphasis"><em>N</em></span></span></dt><dd>Совпадает со строками от <span class="emphasis"><em>adr1</em></span> и до строки, которая кратна <span class="emphasis"><em>N</em></span> (включительно, кратность проверяется начиная со строки, которая следует за строкой <span class="emphasis"><em>adr1</em></span>). К примеру, 4,~4 совпадает со строками 4,5,6,7, и 8. Восемь - ближайшее кратное к четырём начиная с пяти.</dd></dl></div><p>
</p></div><div class="section" title="Регулярные выражения"><div class="titlepage"><div><div><h4 class="title"><a name="id2517853"></a>Регулярные выражения</h4></div></div></div>
Регулярные выражения стандарта POSIX.2 не полностью поддерживаются, потому-что полная поддержка этого стандарта приведёт к проблемам производительности. Символ '\n' в регулярных выражениях совпадает с символом перевода строки, кроме того, поддерживаются символы \a, \t и другие.
</div><div class="section" title="Ошибки"><div class="titlepage"><div><div><h4 class="title"><a name="id2517869"></a>Ошибки</h4></div></div></div>
E-mail bug reports to bonzini@gnu.org. Be sure to include the word ``sed'' somewhere in the ``Subject:'' field. Also, please include the output of ``sed --version'' in the body of your report if at all possible.
<div class="note" title="Замечание" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Замечание</h3><p>
Непонятно? А что делать... Нужно сначала выучить английский, а потом писать разработчикам про ошибки. К сожалению русского они не понимают :-(
</p><p>
Впрочем вы можете писать <a class="ulink" href="http://emulek.tk/forum/viewtopic.php?t=4761" target="_top">на форум</a>. Попытаюсь ответить, а если не смогу - отправлю весточку разработчикам.
</p><p>
Подробнее про ошибки см. <a class="link" href="ch02s04.html#bugs">здесь</a>.
</p></div></div><div class="section" title="COPYRIGHT"><div class="titlepage"><div><div><h4 class="title"><a name="id2517920"></a>COPYRIGHT</h4></div></div></div><p>Copyright ╘ 2003 Free Software Foundation, Inc.</p><p>This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, to the extent permitted by law.</p><p>Тут я надеюсь всё понятно: гарантий НИКАКИХ.</p></div><div class="section" title="Ссылки"><div class="titlepage"><div><div><h4 class="title"><a name="id2517941"></a>Ссылки</h4></div></div></div><p>awk(1), ed(1), grep(1), tr(1), perlre(1), sed.info, any of various books on sed, the sed FAQ (http://sed.sf.net/grabbag/tutorials/sedfaq.html), http://sed.sf.net/grabbag/.</p><p>
The full documentation for sed is maintained as a Texinfo manual. If the info and sed pro-grams are properly installed at your site, the command
<pre class="programlisting">info sed</pre>
</p><p>
См. также: <a class="ulink" href="ch06.html" target="_top">info sed. Русский перевод.</a>, там более полная документация по-русски.
</p><p>
should give you access to the complete manual.
</p></div>
sed version 4.0.9 January 2004
<div class="note" title="Замечание" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Замечание</h3><p>Переведено drBatty 2010г.</p><p>При переводе использовались оригинальные ман и инфо страницы для GNU sed версий 4.0.9 и 4.2. Кроме того были использованы исходные тексты для выяснения некоторых тонких моментов реализации.</p></div><div class="blockquote"><blockquote class="blockquote"><p>
Вы можете обсудить этот документ на <a class="ulink" href="http://emulek.tk/forum/viewtopic.php?f=19&t=5026" target="_top">форуме</a>. Текст предоставляется по лицензии <a class="ulink" href="http://www.gnu.org/licenses/fdl.html" target="_top">GNU Free Documentation License</a> (<a class="ulink" href="http://forum.lorcode.org/viewtopic.php?f=15&t=30" target="_top">Перевод лицензии GFDL</a>).
</p><p>
Вы можете пожертвовать небольшую сумму яндекс-денег на счёт <span class="command"><strong>41001666004238</strong></span> для оплаты хостинга, интернета, и прочего. Это конечно добровольно, однако это намного улучшит данный документ (у меня будет больше времени для его улучшения). На самом деле, проект часто находится на грани закрытия, ибо никаких денег никогда не приносил, и приносить не будет. Вы можете мне помочь. Спасибо.
</p></blockquote></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s06.html">Пред.</a> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch04.html">След.</a></td></tr><tr><td width="40%" align="left" valign="top">Что нового в версии 4.2 по сравнению с 4.1.5? </td><td width="20%" align="center"><a accesskey="h" href="index.html">Начало</a></td><td width="40%" align="right" valign="top"> Глава 4. Примеры скриптов.</td></tr></table></div></body></html>