Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> документация —> man —> sed

sed man

Автор: Andy.


Имя

sed - потоковый редактор

Сценарий
sed [-Ealn] command [file ...]
sed [-Ealn] [-e command] [-f command_file] [-i extension] [file ...]

Описание

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

Одна команда может быть указана, как первый аргумент sed. Множественные команды
могут быть указаны использованием опций -e или -f. Все команды применяются в порядке их указания, вне зависимости от их происхождения.

Доступны следующие опции:

-E Интерпретирует регулярные выражения как расширенные (современные), регулярные выражения чаще, чем основные регулярные выражения. Страница документации на
re_format(7) полностью описывает оба формата.

-a Файлы перечисленные как параметры функции ``w'' создаются (или удаляются)
прежде, чем начнется процесс по умолчанию. Опция -a  заставляет sed откладывать открытие каждого файла до тех пор, пока команда содержащая связную функцию ``w'' не применяется к строке ввода.

-e command Добавляет команды редактирования определенные аргументом command, к списку команд

-f command_file Добавляет команды редактирования найденные в файле command_file к списку команд. Каждая команда редактирования должна быть перечислена в отдельной строке.

-i extension Редактирует файлы с замещением, сохраняя резервную копию с указанным расширением. Если расширение не указано (нулевой длины), резервная копия не будет сохраняться. Не рекомендуется присваивать нулевое расширение к замещаемым файлам, поскольку вы рискуете полностью или частично повредить файл, когда место на диске исчерпано.

-l создает буфер выходных строк

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

Форма команд sed следующая:

[address[,address]]function[arguments]

Пробелы (whitespaces) могут быть вставлены до первого адреса и  частями функции команды.

Обычно sed циклически копирует строку ввода, не включая завершающий символ новой
строки, в шаблон пробелов, (до тех пор, пока кто-нибудь не оставит ``D'' функцию) применяет все команды с адресами которые выбрали этот шаблон, копирует шаблон на стандартный вывод, добавляя символ новой строки и удаляя шаблон.

Некоторые функции используют hold space, для сохранения всего или части шаблона
для последующего поиска.

Адреса Sed
Адрес не обязателен, но если он указан, то адрес должен являться номером (который считает строки входных файлов), знаком доллара ('$') который указывает на последнюю введенную строку или контекстный адрес (который содержит регулярное вы ражение которому предшествует, и следует за ним, разделитель).

Командная строка без адресов выбирает каждый шаблон

Командная строка с одним адресом выбирает все шаблоны, которые совпадают с адресом.

Командная строка с двумя адресами выбирает включительный диапазон. Диапазон начинается с первого шаблона который совпадает с первым адресом. Конец диапазона следующий шаблон, который совпадает со вторым адресом. Если номер второго адреса равно или меньше номера строки первого, в таком случае эта строка будет выбрана.
В случае, когда второй адрес - контекстный адрес, sed не производит повторного
сравнения второго адреса с шаблоном, который совпадает с первым адресом. Начиная с первой строки, сопровождаемой выбранным диапазоном, sed начинает поиск первого адреса снова.

Редактирование команд может применяться к  невыбранным шаблонам, через использование символа (``!'').

Регулярные выражения sed

Регулярные выражения используемые в sed, по умолчанию, являются основными регулярными выражениями (смотрите re_format(7), для более детальной информации), но вместо них могут использоваться раширенные (новые) регулярные выражения, если будет использован флаг -E.

В добавок, sed имеет следующие дополнения к регулярным выражениям:

1. В контекстном адресе, любой символ отличный от обратного слеша (``\'') или символа новой строки, может использоваться для разграничения регулярного выражения. Так же, использование обратного слеша перед разграничительным символом, заставляет символ являться литерой. Например, в контекстном адресе \xabc\xdefx,
разграничивающим символом в регулярном выражении является ``x'', второй ``x'' будет являться литерой, поэтому регулярное выражение будет ``abcxdef''.

2. последовательности \n совпадает с символом новой строки, встроенным в шаблон. Вы не можете использовать литеры символа новой строки в адресе, или команде подмены.

Единственной особенностью присущей регулярным выражениям sed, является особенность
быть по умолчанию по отношению к последему используемому регулярному выражению. Если регулярное выражение пустое, то есть, только указан разграничивающий символ, в таком случае будет использовано последнее использовавшееся регулярное выражение. Последнее регулярное выражение определяется как последнее использовавшееся  регулярное выражение, как часть адреса или команды подмены, во время запуска, а
не во время компиляции. Например, команда ``/abc/s//XXX/'' заменит ``XXX'' на шаблон ``abc''.

Функции sed

В следующем списке команд, максимальное количество разрешенных адресов для каждой команды показывается как [0addr], [1addr], или [2addr], представляя ноль, один или два адреса. Аргумент text содержит одну или более строк. Что бы включить символ новой строки в текст, поставьте перед ним символ обратного слеша. Другие символы обратного слеша в тексте удаляются и следующие за ними символы рассматриваются как литеры.

Функции ``r'' и ``w'' берут опциональный параметр файла, который должен быть отделен от функционального символа пробелом (whitespace). Каждый файл, заданный как аргумент для sed'а, создается (или содержимое его урезается) прежде, чем начнется любая обработка ввода.

Функции ``b'', ``r'', ``s'', ``t'', ``w'', ``y'', ``!'', и ``:'' принимают дополнительные аргументы. Следующий пример показывает, какие аргументы должны быть отделены из символов функций, пробелами (whitespaces).

Две функции составляют список функций. Список функций sed разделяется символами
новой строки, как показано в следующим примере:
{ function
  function
  ...
  function
}

``{'' может предворяться пробелом и сопровождаться пробелом. Функции могут
предворяться пробелом. Звершающая ``}'' может пердворяться символом новой строки
или пробелом.

[2addr] function-list Запускает  список функций только, когда выбран шаблон.

[1addr]a\
    text Записывает text в стандартный вывод незамедлительно, до попыток прочитать
строку ввода, используется ли функция ``N'' или начинается новый цикл.

[2addr]b[label] Разветвляет функцию ``:'' определенным лейблом. Если лейбл не указан
разветвление происходит в конце скрипта.

[2addr]c\
   text   Удаляет шаблон. С 0 или 1 адреса, или диапазон 2 адресов, text выводится
на стандартный вывод.

[2addr]d Удаляет шаблон и начинает новый цикл.

[2addr]D Удаляет начальный сегмент шаблона через первый символ новой строки и
начинает новый цикл.

[2addr]g Заменяет содержимое шаблона содержимым hold space.

[2addr]G Добавляет символ новой строки, сопровождаемый содержимым hold space.

[2addr]h Замещает содержимое hold space, сождержимым шаблона.

[2addr]H Добавляет символ новой строки, сопровождаемы содержимым шаблона

[1addr]i\
    text Записывает text на стандартный вывод.

[2addr]l (буква эль). Записывает шаблон на стандартный вывод в визуально
однозначной форме. Эта форма следующая:
обратный слэш               \\
сигнал                      \a
form-feed                   \f
возврат каретки             \r
табуляция                   \t
вертикальня табуляция       \v

Непечатные символы записываются как трехзначные восмеричные номера (предваряемые
обратным слешем) для каждого байта в символе (наиболее важные байты сначала).
Длинные строки переносятся с указанием точки переноса в виде обратного слеша
сопровождаемого символом новой строки. Конец каждой строки указан символом ``$''.

[2addr]n Записывает шаблон на стандартный вывод если вывод по умолчанию не был
переопределен, и заменяте шаблон следующей строкой ввода.

[2addr]N Добавляет следующую строку к шаблону, используя встроенный символ новой
строки, для разделения добавляемого материала от оригинального содержимого.

[2addr]p Записывает шаблон на стандартный вывод.

[2addr]P Записывает шаблон до первого символа новой строки, на стандартный вывод.

[1addr]q Разветвляет конец скрипта и выходит без загрузки нового цикла.

[1addr]r file Копирует содержимое file на стандартный вывод сразу же, прежде чем
произойдет следующая попытка чтения строки. Если file не может быть прочитан,
по любой причине, он тихо игнорируется и состояние ошибки не устанавливается.

[2addr]s/regular expression/replacement/flags
Подменяет, замещаемую строку, первым регулярным выражением в шаблоне. Любой символ
отличный от обратного слеша или символа новой строки может быть использован вместо
обратного слеша или символа новой строки, вместо слеша, что бы разделить регулярное
выражение и замещение. Внутри регулярного выражения и замещения, разделитель
регулярных выражений сам может быть использован как литера, если он предварен
обратным слешем.
Амперсанд (``&'') появляется в замене, если замещаемая строка совпадает с регулярным
выражением. Особое значение ``&'' в этом контексте может быть изменено,
предварением амперсанда обратным слешем. Строка ``\#'', где ``#'' цифра, которая
замещается текстом совпавшим с передачей обратного выражения.

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

Значение flags в заменяемой функции - ноль или одна из следующих:

N Создавать замену только для N' повторений регулярного выражения в шаблоне.
g Создавать замену для всех неперекрывающих совпадений регулярного выражения,
не только для первого.
p Записывать шаблон на стандартный вывод, если сделано замещение. Если замещаемая
строка совпадает с замещаемой, она все еще расценивается как замещение.
w Добавляет шаблон к file если замещение произошло. Если замещаемая строка совпадает
с замещаемой, она все еще расценивается как замещение.

[2addr]t [label]
Разветвление функции ``:'' лейбл, если любая замена была сделана с момента
нового чтения строки ввода или запуска функции ``t''. Если лейбл не определен,
разветвление идет до конца скрипта.

[2addr]w file Добавляет шаблон к file.

[2addr]x Меняет содержимое шаблона и hold spaces.

[2addr]y/string1/string2/
Замещает все повторения символа в string1 в шаблоне с соответствующими символами
из string2. Любой символ, отличный от обратного слеша или символа новой строки
может использоваться вместо обратного слеша или символа новой строки для разделения строк. Внутри string1 и string2 обратный слеш сопровождается любым символам отличным от символа новой строки, который является литерой и обратный слеш сопровождаемый ``n'' замещается символом новой строки.

[2addr]!function
[2addr]!function-list
Применяет функцию или список функций только для строк которые не выбраны адресом.

[0addr]:label
Эта функция ничего не делает, она вызывает лейбл в котором команды ``b''
и ``t'' могут разветвляться.

[1addr]=
Записывает номер строки на стандартный вывод спопровождаемый символом новой строки.

[0addr]
Игнорирует пустые строки.

[0addr]#
``#'' и остаток строки игнорируются (расценивается как коментарий), с единственным исключением что если первые два символа в файле являются ``#n'', вывод по умолчанию подавляетс. То же самое, что и определение опции -n в командной строке.

Окружение
Переменные COLUMNS, LANG, LC_ALL, LC_CTYPE и LC_COLLATE препятствуют запуску sed
как описано в environ(7).

Состояние выхода
утилита sed выходит с установкой 0 если выход прошел успешно, и >0 если возникли
ошибки.

Смотрите так же
awk(1), ed(1), grep(1), regex(3), re_format(7)

Стандарт
утилита sed, как ожидается, будет в наборе спецификаций EEE Std 1003.2 (``POSIX.2'')
Опции -E, -a и -i не стандартны для расширений FreeBSD и могут быть недоступны для других операционных систем.

История
команда sed написана L. E. McMahon, появилась в Version 7 AT&T UNIX.

Автор
Diomidis D. Spinellis <dds@FreeBSD.org>

Ошибки
Мультибайтовые символы, содержащие значение 0x5C (ASCII `\') могут быть распознаны
некорректно как продолжение символов строки в аргументах команд `a'', ``c'' и ``i''
Мультибайтовые символы не могут использоваться как разделители с командами
``s'' и ``y''



размещено: 2007-08-30,
последнее обновление: 2007-09-03,
автор: Andy



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0354 секунд
Из них PHP: 23%; SQL: 77%; Число SQL-запросов: 57 шт.
Исходный размер: 30868; Сжатая: 8426