sed

Потоковый редактор (POSIX)

Синтаксис:

sed [[-n] сценарий [файл...] 
sed [-n] [-e сценарий]... [-f файл_сценария]... [-V] [файл...]

Опции:

-e сценарий
Использовать сценарий командной строки для правки файла или файлов, определенных посредством аргумента (аргументов) файл. Если указано несколько опций -e, то сценарии, определенные аргументом сценарий, применяются в порядке, заданном для каждой строки входных файлов. Если помимо опции -e определено значение опции -f, строки сначала обрабатываются с использованием сценариев по аргументу сценарий.
-f файл_сценария
В качестве сценария инструкций по редактированию используется файл_сценария. Если указано несколько опций -f, то сценарии применяются в порядке, заданном для каждой строки входных файлов. Если помимо опции -f указана опция -e, то строки сначала обрабатываются с использованием сценариев, заданных аргументом сценарий.
--follow-symlinks
Следовать символическим ссылкам при обработке на месте.
-n
Скрыть вывод по умолчанию с переносом каждой строки в стандартный поток вывода после проверки для правки. Записываются только строки, явно выбранные для вывода.
--posix
Запретить все расширения GNU.
-E
-r
--regexp-extended
Использовать расширенные регулярные выражения в сценарии.
-s
--separate
Рассматривать файлы отдельно, не как единый поток.
--sandbox
Работать в режиме «песочницы».
-u
--unbuffered
Загружать минимальный размер данных из входных файлов и сбрасывать выходные буферы чаще.
-z
--null-data
Разделять строки символами NUL
--help
Вывести справочную информацию.
--version
вывести информацию о версии утилиты.
-V
Вывести номер версии и завершить работу.
файл
Путь к текстовому файлу, содержимое которого требуется считать и отредактировать. Если выбрано несколько файлов, чтение выполняется в указанном порядке с конкатенацией правок. Если файлы не указаны, используется стандартный поток ввода.
сценарий
Сценарий состоит из одной или нескольких инструкций правки, введенных в командной строке.

Платформы:

ЗОСРВ «Нейтрино»

Целевые архитектуры:

aarch64, arm, armv7, e2k, mips, ppc, x86

Описание:

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

Команды sed обычно хранятся в программном файле (файл_сценария), однако простые команды sed можно вводить через командную строку. По умолчанию sed копирует файлы из списка файлов в стандартный поток вывода с правкой строк. В принципе, существует один входной файл, который представляет собой конкатенацию всех указанных входных файлов.

Выбор строк для правки выполняется на основе их положения во входном файле или путем сопоставления с шаблоном. Если файлы в списке отсутствуют, используются входные данные из стандартного потока ввода (это единственный случай использования стандартного потока ввода). Утилита sed сначала считывает все команды правки из всех указанных источников и помещает их во внутреннюю таблицу в определенном порядке. Далее выполняется обработка (сцепленного) входного файла следующим образом:

  1. Выполняется считывание одной строки из входного файла с копированием в пространство шаблонов (рабочую область).
  2. Для каждой команды, выбирающей строку, пространство шаблонов обрабатывается в соответствии с инструкциями команды правки с циклическим помещением результата в пространство шаблонов.
  3. После проверки всех команд на соответствие пространству шаблонов выполняется запись пространства шаблонов в стандартный поток вывода при условии, что значение -n не определено. В этот момент пространство шаблонов может содержать ни одной, одну или несколько строк.
  4. Далее содержимое пространства шаблонов удаляется.
  5. Процедура повторяется с шага 1 до полного завершения операции чтения и обработки (сцепленного) входного файла.

Сценарии

Сценарий состоит из команд правки в следующем формате (по одной в каждой строке):

[адрес[,адрес]]функция[аргументы]

Сценарий команд правки можно указать в командной строке или использовать сценарий из файла, определенного аргументом файл_сценария.

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

При выполнении некоторых команд для полного или частичного сохранения пространства_шаблонов используется пространство_удержания с последующим извлечением данных. Пространство_шаблонов и пространство_удержания имеют ограничение по размеру – 20 КБ.

Адреса

Возможные варианты адреса:

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

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

Для применения команд правки к невыбранным пространствам шаблонов можно использовать символ отрицания (!). Для получения дополнительной информации см. раздел "Команды правки" далее.

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

Утилита sed использует базовые регулярные выражения (RE) со следующими дополнениями:

Команды правки

В следующем списке функций максимальное число допустимых адресов для каждой функции определено одним из аргументов: [0addr], [1addr] или [2addr], что соответствует отсутствию адресов, одному или двум адресам соответственно. Аргумент текст состоит из одной или нескольких строк. Перед каждым встроенным в текст символом новой строки newline должна стоять обратная косая черта. Другие обратные косые черты в тексте обрабатываются как аналогичные символы в строке замены команды правки s; они используются для предотвращения отбрасывания начальных пробелов blank в каждой строке сценария.

Команды правки r и w используют дополнительный параметр rfile (или wfile), отделенный от буквы команды нулем или несколькими пробелами blank.

Аргументы rfile или wfile завершают командную строку. Каждый аргумент wfile создается до начала обработки. В сценарии может использоваться до десяти отдельных аргументов wfile.

При выполнении команд правки b, r, s,t, w, y, ! и : используются дополнительные аргументы. Далее кратко представлены аргументы, отделяемые от команд пробелами:

[2addr] { список_команд }
Выполнять список_команд только в том случае, если выбрано пространство шаблонов. (Следует учесть, что конечный символ } должен являться первым непробельным символом в строке.)
[1addr]a\
текст
Записать текст в стандартный поток вывода после записи пространства шаблонов.
[2addr]b метка
Перейти к команде : (двоеточие) с аргументом метка. Если значение аргумента метка не указано, перейти к концу сценария.
[2addr]c\
текст
Удалить пространство шаблонов. При использовании 0 или 1 адреса, либо в конце диапазона из 2 адресов поместить текст в вывод.
[2addr]d
Удалить пространство шаблонов и запустить следующий цикл.
[2addr]D
Удалить начальный сегмент пространства шаблонов до первого символа новой строки newline и запустить новый цикл.
[2addr]g
Заменить содержимое пространства шаблонов содержимым пространства удержания.
[2addr]G
Добавить содержимое пространства удержания в пространство шаблонов.
[2addr]h
Заменить содержимое пространства удержания содержимым пространства шаблонов.
[2addr]H
Добавить содержимое пространства шаблонов в пространство удержания.
[1addr]i\
текст
Записать текст в стандартный поток вывода до записи пространства шаблонов.
[2addr]l
Представить пространство шаблонов в стандартном потоке вывода в однозначном формате. Непечатаемые символы отображаются как пары шестнадцатеричных цифр с предшествующей обратной косой чертой. При этом применяются следующие исключения:
\a
alert (символ звукового сигнала)
\\
backslash (обратная косая черта)
\b
backspace
\r
carriage return (символ возврата каретки)
\f
form-feed (символ перевода страницы)
\n
newline
\t
tab
\v
vertical tab (символ вертикальной табуляции)


Длинные линии сворачиваются; длина, при которой выполняется сворачивание, не определена, но должна соответствовать особенностям устройства вывода.
[2addr]n
Копировать пространство шаблонов в стандартный поток вывода и заменить пространство шаблонов следующей строкой ввода.
[2addr]N
Добавить следующую строку ввода в пространство шаблонов с разделением добавленного и исходного материала посредством символа новой строки newline. Обратите внимание на изменение номера строки.
[2addr]p
Копировать (вывести) пространство шаблонов в стандартный поток вывода.
[2addr]P
Копировать (вывести) пространство шаблонов до первого символа новой строки newline в стандартный поток вывода.
[1addr]q
Перейти к концу сценария и выполнить выход без запуска нового цикла.
[1addr]r rfile
Считать содержимое файла rfile. Содержимое помещается в вывод перед считыванием следующей строки ввода.
[2addr]s/регулярное_выражение/строка_замены/флажки
Выполнить подстановку строки_замены для экземпляров регулярного_выражения в пространстве шаблонов. Вместо символа / можно использовать любой символ. Возможными значениями аргумента флажки являются нуль или следующие варианты:
n
n = от 1 до 512. Подстановка n-го вхождения только для регулярного_выражения, найденного в пространстве шаблонов.
g
Выполнить глобальную подстановку для всех неперекрывающихся экземпляров регулярного_выражения, а не только для первого экземпляра. Если указаны значения g и n, более высокий приоритет имеет значение g.
p
Вывести пространство шаблонов, если была произведена замена.
w wfile
Добавить (записать) пространство шаблонов в файл wfile, если была произведена замена.
[2addr]t метка
Выполнить проверку; перейти к команде : (двоеточие) с аргументом метка, если с момента последнего считывания строки ввода или выполнения команды t были произведены какие-либо замены. Если значение аргумента метка не указано, то перейти к концу сценария.
[2addr]w wfile
Добавить (записать) пространство шаблонов в файл wfile.
[2addr]x
Поменять местами содержимое пространства шаблонов и пространства удержания.
[2addr]y/строка1/строка2/
Заменить все вхождения элементов упорядочения в строке строка1 соответствующим элементом упорядочения в строке строка2. Длины строк строка1 и строка2 должны совпадать.
[2addr]! функция
Применить функцию (или список команд, если для аргумента функция указано значение "{)" только к строкам, не выбранным посредством адресов.
[0addr]:метка
Эта команда не выполняет никаких действий; она определяет значение аргумента метка для команд b и t, к которым требуется перейти.
[1addr]=
Поместить текущий номер строки в стандартный поток вывода в виде строки с собственным номером.
[0addr]
Пустая команда; игнорируется.
[0addr]#
Если # является первым символом в любой строке файла сценария, строка полностью игнорируется (обрабатывается как комментарий). Единственным исключением является случай, когда первая строка файла сценария начинается с символа #n. При этом вывод по умолчанию будет скрыт (как при определении значения опции -n в командной строке).

Примеры:

В файле myfile найти и вывести только те строки, которые содержат строку "tom":

sed -n -e "/tom/p" myfile

В файле myfile заменить все вхождения строки beneath строкой below и вывести в файл newfile:

sed -e "s/beneath/below/" myfile >newfile

Файлы:

Все файлы являются текстовыми. Файлы_сценариев, имена которым присвоены с помощью опции -f, состоят из команд правки (по одной в каждой строке). С помощью команды r можно указать любое число дополнительных текстовых входных файлов для вставки неотредактированных данных в стандартный поток вывода в точках, предварительно определенных по правилам правки. С помощью команды w в сценарии можно указать до 10 дополнительных выходных файлов.

Возвращаемое значение:

0
Завершено успешно.
>0
Возникла ошибка.

Ошибки:

Если не удается открыть для чтения один или несколько входных файлов (к ним не относятся файлы сценариев), утилита sed продолжает обработку остальных файлов.

Классификация:

Базовые подсистемы ЗОСРВ «Нейтрино», POSIX

В ЗОСРВ «Нейтрино» редакции 2020 утилита обновлена до версии 4.8

Тематические ссылки:

gawk




Предыдущий раздел: Утилиты