Разница между 1.39
и текущей версией
ЯзыкSed.
@@ -1,8 +1,24 @@
-- Потоковый редактор sed
+= Потоковый редактор sed
-Один из долгожителей мира Unix, к сожалению позабытый инструмент эффективного решения множества задач, связанных с обработкой текста.
+Один из долгожителей мира Unix, к сожалению позабытый инструмент эффективного решения множества задач, связанных с обработкой текста. По утверждению авторов языка ''sed'', разработанного в 1978 году как расширение редактора ''ed'', новый редактор предназначался для трёх специфичных случаев:
--- Основы языка
+ 1 Работа с большими по объёму файлами, редактирование которых в интерактивном режиме неудобно.
+ 1 Редактирование файлов любого размера в том случае, если последовательность команд редактирования неудобна для интерактивного ввода.
+ 1 Выполнение множества команд редактирования эффективно за один проход (критично для организации конвеера).
+
+Утилита ''sed'' входит в состав дистрибутивов Unix; стандарт поведения и языка специфицированы IEEE Std 1003.1, а также во включающим его ''''''SUSv4''''''.
+
+- Основы языка
+
+Приблизительно ''sed'' выполняет следующие действия:
+
+ foreach входной-файл
+ while читать-строку-в-буфер-шаблона
+ foreach шаблон
+ if строка-совпала-c-шаблоном-в-буфере
+ выполнить-команды ...
+
+Из них пользователем программируются только шаблоны и команды; таким образом ''sed'' берёт на себя часть «грязной» работы, связанной с чтением файлов и других рутинных действий.
Так как ''sed'' — потоковый редактор, он выполняет действия со строками текста. Операции ''sed'' ориентированы на построчную обработку потока текста, поступающего на стандартный ввод или из файлов.
@@ -14,7 +30,22 @@
По умолчанию ''sed'' печатает все строки, поступающие на стандартный ввод. Это поведение отключается опцией '''-n'''. Выходные строки ''sed'' печатает на стандартный вывод и может быть использован как часть конвеера оболочки. Это распространённый практический приём — использование ''sed'' в качестве фильтра.
--- Шаблоны
+-- Использование в скриптах
+
+Если потоковый редактор ''sed'' используют в скриптах, то для повышения читаемости его команд их разделяют построчно. Каждую команду помещают на отдельную строку, в таком случае символ разделителя команд «;» не используется. Например, такой сценарий оболочки, использующий ''sed'', печатает только непустые строки из списка файлов или стандартного ввода (если список файлов пуст), заменяя в конце строки последовательность CR-LF (``'\r\n'``) на LF (``'\n'``):
+
+ #!/bin/sh
+ sed -n '
+ /./ {
+ s/\r$//
+ p
+ }' "$@"
+
+Такой же пример записанный компактно в одну строку выглядит так:
+
+ $ sed -n '/./{s/\r$//;p}' /etc/passwd /etc/group
+
+- Шаблоны
Все команды языка оперируют в контексте шаблона, который соотносится с входной строкой. Шаблон может отсутствовать вообще, такой пустой шаблон действует на любую строку. Не пустой шаблон может быть регулярным выражением, номером строки или диапазоном.
@@ -60,11 +91,11 @@
telnetd:x:116:128::/nonexistent:/bin/false
$
--- Буфер шаблона
+- Буфер шаблона
Подчеркнём, что ''sed'' -- строчно-ориентированный язык. Строка, совпавшая с шаблоном, помещается в буфер шаблона. Большинство команд воздействуют на содержимое буфера шаблона, который по сути своей является переменной типа «строка».
--- Команды редактирования
+- Команды редактирования
Строка, совпавшая с шаблоном, помещается в буфер шаблона. Предыдущее значение буфера затирается.
Со строкой в буфере шаблона выполняются различные действия редактирования: удаление (d), дополнение (a), вставка (i), замена (c). В буфер шаблона может быть считана следующая строка (n) с удалением предыдущего значения или с приписыванием к нему (N) с символом переноса строки ('\n') в качестве разделителя.
@@ -78,7 +109,7 @@
Over the hellish crevasse flapped.
$
---- Удаление
+-- Удаление
Для удаления строки или диапазона строк задают шаблон, предшествующий команде удаления.
@@ -87,7 +118,7 @@
Over the hellish crevasse flapped.
$
---- Дополнение
+-- Дополнение
Команда дополнения дописывает строку после совпавших с шаблоном строк.
@@ -99,7 +130,7 @@
The spirit of qualm and negation
$
---- Вставка
+-- Вставка
Команда вставки приписывает строку до совпавших с шаблоном строк.
@@ -111,7 +142,7 @@
The spirit of qualm and negation
$
---- Замена
+-- Замена
Команда замены заменяет строки, совпавшие с шаблоном, на строку пользователя.
@@ -122,9 +153,9 @@
The spirit of qualm and negation
$
---- Многострочные дополнение, вставка и замена
+-- Многострочные дополнение, вставка и замена
-Команды дополнения, вставки и замены могут дополнять, вставлять и заменять строку, совпавшую с шаблоном, несколькими строками. При вводе многострочных значений конец ввода определяется по символу перевода строки (`'\n'`), а предыдущие строки оканчивают знаком «\».
+Команды дополнения, вставки и замены могут дополнять, вставлять и заменять строку, совпавшую с шаблоном, несколькими строками. При вводе многострочных значений конец ввода определяется по символу перевода строки (``'\n'``), а предыдущие строки оканчивают знаком «\».
# '''sed '4aThe spirit of qualm and negation\'''
'''Looked at another one – of good,'''
@@ -137,10 +168,10 @@
Looked at another one – of good,
$
--- Команда подстановки
+- Команда подстановки
Наиболее употребительна команда подстановки (s), которая также действует с буфером шаблона.
-Действие команды подстановки изменяется дополнительными флагами. Например, действие подстановки можно повторить нерекурсивно ко всей строке множество раз (g), при подстановке выводить строку, если регулярное выражение подстановки дало совпадение (p). В команде подстановки по умолчанию используются POSIX базовые регулярные выражения (Basic Regular Expressions), как и во множестве прочих утилит Unix. Некоторые реализации 'sed' позволяют применять расширенные регулярные выражения (Extended Regular Expressions) POSIX, например, для GNU sed достаточно включить опцию '''-r'''.
+Действие команды подстановки изменяется дополнительными флагами. Например, действие подстановки можно повторить нерекурсивно ко всей строке множество раз (g), при подстановке выводить строку, если регулярное выражение подстановки дало совпадение (p). В команде подстановки по умолчанию используются POSIX базовые регулярные выражения (Basic Regular Expressions), как и во множестве прочих утилит Unix. Некоторые реализации ''sed'' позволяют применять расширенные регулярные выражения (Extended Regular Expressions) POSIX, например, для GNU sed достаточно включить опцию '''-r'''.
''Использование sed вместо grep.''
$ '''sed -n '/^mysql/p' /etc/passwd'''
@@ -150,17 +181,17 @@
nosql:x:113:121:''''''NoSQL'''''' Server,,,:/nonexistent:/bin/false
$
-Для предыдущего примера стоит дать пояснение, так как в нём задействованы управляющие конструкции. В команде, которая производит замену подстрок, используется шаблон. К строке, совпавшей с шаблоном, применяется три команды, сгруппированные в фигурных скобках (`{`…`}`). Каждая команда отделяется от предыдущей знаком «;».
+Для предыдущего примера стоит дать пояснение, так как в нём задействованы управляющие конструкции. В команде, которая производит замену подстрок, используется шаблон. К строке, совпавшей с шаблоном, применяется три команды, сгруппированные в фигурных скобках (``{``…``}``). Каждая команда отделяется от предыдущей знаком «;».
--- Управляющие конструкции
+- Управляющие конструкции
-Команды группируются для применения к одному шаблону в фигурных скобках (`{`…`}`).
+Команды группируются для применения к одному шаблону в фигурных скобках (``{``…``}``).
Команды, следующие друг за другом при группировке разделяются точкой с запятой (;).
Если после шаблона поместить восклицательный знак (!), то следующие команды будут применены к не совпавшим с ним строкам. Это знак инверсии шаблона.
-- Чтение строк
-В буфер шаблона может быть считана следующая строка текста (n) или добавлена к существующей (N); в последнем случае строки разделяются символом новой строки (`'\n'`).
+В буфер шаблона может быть считана следующая строка текста (n) или добавлена к существующей (N); в последнем случае строки разделяются символом новой строки (``'\n'``).
''В буфер шаблона помещается строка следующая после совпавшей с шаблоном.''
$ '''sed -n '/^root:/{n;p}' /etc/passwd'''
@@ -173,18 +204,21 @@
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
$
--- Буфер удержания
+- Буфер удержания
Буфер шаблона можно сохранить в буфере удержания. Для этого имеется четыре команды: копировать в буфер удержания с затиранием (h) и без затирания с приписыванием через символ новой строки (H), поместить содержимое буфера удержания в буфер шаблона с затиранием (g) и без затирания (G).
Ещё одна команда позволяет обменять значения буферов удержания и шаблона (x).
-- Метки и переходы
-Язык sed позволяет организовывать циклы.
-Для этого в нём имеются команды установки метки (:<label>), безусловного перехода на метку (b<label>), и условного перехода (t<label>). Последняя проверяет флаг, устанавливающийся при любых успешных подстановках для текущей входной строки; если таковые имели место, то выполняется переход на метку. Флаг сбрасывается при чтении следующей строки или при выполнении команды условного перехода (t).
+Язык ''sed'' позволяет организовывать циклы.
+Для этого в нём имеются команды установки метки (:<''label''>), безусловного перехода на метку (b<''label''>), и условного перехода (t<''label''>). Последняя проверяет флаг, устанавливающийся при любых успешных подстановках для текущей входной строки; если таковые имели место, то выполняется переход на метку. Флаг сбрасывается при чтении следующей строки или при выполнении команды условного перехода (t).
--- Литература
+- Литература
- 1 McMahon L. E. SED: a Non-interactive Text Editor. – Bell Telephone Laboratories, 1979.
+ 1 ''''''McMahon'''''', L. E. SED: a Non-interactive Text Editor / L. E. ''''''McMahon''''''. — Bell Telephone Laboratories, 1979.
+ 1 Dougherty, D. UNIX text processing / Dale Dougherty, Tim O'Reilly. — Hayden Books, 1987. — Vol. 25943. — URL: http://www.oreilly.com/openbook/utp/.
+ 1 Peek, J. Unix Power Tools / Jerry Peek, Shelley Powers, Tim O'Reilly, Mike Loukides. — 3rd ed. — O'Reilly Media, October 2002.
+ 1 The Open Group Base Specifications Issue 7 [[Электронный ресурс]] : sed - stream editor / The IEEE and The Open Group. — IEEE Std 1003.1, 2013 Edition. — 2013. — Режим доступа: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sed.html, свободный.
# КатегорияЯзыкиПрограммирования