sed - потоковый редактор для фильтрации и преобразования текста
СИНТАКСИС
sed [-V] [--version] [--help] [-n] [--quiet] [--silent]
[-l N] [--line-length=N] [-u] [--unbuffered]
[-E] [-r] [--regexp-extended]
[-e script] [--expression=script]
[-f script-file] [--file=script-file]
[script-if-no-other-script]
[file...]
ОПИСАНИЕ
Sed — это потоковый редактор. Потоковый редактор используется для выполнения базовых преобразований текста во входном потоке (файле или вводе из конвейера). Хотя он в некотором смысле похож на редактор, который позволяет выполнять скриптовые правки (например, ed), sed работает, выполняя только одно прохождение по входным данным, и, следовательно, является более эффективным. Но именно способность sed фильтровать текст в конвейере отличает его от других типов редакторов.
-n, --quiet, --silent
подавляет автоматическую печать буфера шаблона
--debug
добавляет аннотации к выполнению программы
-e script, --expression=script
добавляет скрипт к командам, которые будут выполнены
-f script-file, --file=script-file
добавляет содержимое script-file к командам, которые будут выполнены
--follow-symlinks
переходит по символическим ссылкам при обработке на месте
-i[SUFFIX], --in-place[=SUFFIX]
редактирует файлы на месте (создает резервную копию, если указан SUFFIX)
-l N, --line-length=N
указывает желаемую длину переноса строк для команды `l`
--posix
отключает все расширения GNU.
-E, -r, --regexp-extended
использует расширенные регулярные выражения в скрипте (для переносимости используйте POSIX -E).
-s, --separate
рассматривает файлы как отдельные, а не как один непрерывный длинный поток.
--sandbox
работает в режиме "песочницы" (отключает команды e/r/w).
-u, --unbuffered
загружает минимальное количество данных из входных файлов и чаще очищает выходные буферы.
-z, --null-data
разделяет строки символами NUL
--help
отображает эту справку и завершает работу
--version
выводит информацию о версии и завершает работу
Если не указаны параметры -e, --expression, -f или --file, то первый аргумент, не являющийся параметром, принимается в качестве скрипта sed для интерпретации. Все остальные аргументы — это имена входных файлов; если не указаны входные файлы, то считывается стандартный ввод.
Домашняя страница GNU sed: [https://www.gnu.org/software/sed/]. Общая справка по использованию программного обеспечения GNU: [https://www.gnu.org/gethelp/>. Отправляйте сообщения об ошибках по адресу: <_].
Упаковано Debian. Авторское право © 2022 Free Software Foundation, Inc. Лицензия GPLv3+: GNU GPL версии 3 или более поздней [https://gnu.org/licenses/gpl.html]. Это свободное программное обеспечение: вы можете изменять и распространять его. Нет никакой ГАРАНТИИ в той мере, в какой это разрешено законом.
СИНТАКСИС КОМАНД
Это всего лишь краткий синопсис команд sed, чтобы послужить напоминанием для тех, кто уже знаком с sed; для получения более подробных описаний необходимо обратиться к другой документации (например, к документу texinfo).
Команды с нулевым адресом \`
: label
Метка для команд b и t.
#comment
Комментарий продолжается до следующей новой строки (или до конца фрагмента скрипта -e).
}
Закрывающая скобка блока { }.
Команды с нулевым или одним адресом
=
Печатает текущий номер строки.
a \
text
Добавляет текст, в котором каждая внедренная новая строка предшествует символу обратной косой черты.
i \
text
Вставляет текст, в котором каждая внедренная новая строка предшествует символу обратной косой черты.
q [exit-code]
Немедленно завершает работу скрипта sed, не обрабатывая больше входных данных, за исключением того, что, если автоматическая печать не отключена, текущий буфер шаблона будет напечатан. Аргумент exit-code является расширением GNU.
Q [exit-code]
Немедленно завершает работу скрипта sed, не обрабатывая больше входных данных. Это расширение GNU.
r filename
Добавляет текст, прочитанный из filename.
R filename
Добавляет строку, прочитанную из filename. При каждом вызове команды считывается строка из файла. Это расширение GNU.
Команды, которые принимают диапазоны адресов
{
Начало блока команд (завершается }).
b label
Переход к метке; если метка опущена, переход в конец скрипта.
c \
text
Заменяет выбранные строки текстом, в котором каждая внедренная новая строка предшествует символу обратной косой черты.
d
Удаляет буфер шаблона. Начинает следующий цикл.
D
Если буфер шаблона не содержит новой строки, запускает обычный новый цикл, как если бы была выдана команда d. В противном случае удаляет текст в буфере шаблона до первой новой строки и перезапускает цикл с полученным буфером шаблона, не считывая новую строку входных данных.
h H
Копирует/добавляет буфер шаблона в буфер удержания.
g G
Копирует/добавляет буфер удержания в буфер шаблона.
l
Выводит текущую строку в визуально однозначной форме.
l width
Выводит текущую строку в визуально однозначной форме, разбивая ее на width символов. Это расширение GNU.
n N
Считывает/добавляет следующую строку входных данных в буфер шаблона.
p
Печатает текущий буфер шаблона.
P
Печатает до первой внедренной новой строки текущего буфера шаблона.
s/regexp/replacement/
Пытается сопоставить regexp с буфером шаблона. В случае успеха заменяет сопоставленную часть на replacement. Замена может содержать специальный символ & для ссылки на ту часть буфера шаблона, которая была сопоставлена, и специальные escape-последовательности \1 до \9 для ссылки на соответствующие подвыражения, сопоставленные в regexp.
t label
Если s/// выполнил успешное замещение с момента последнего чтения строки входных данных и с момента последней команды t или T, то переходит к метке; если метка опущена, переходит в конец скрипта.
T label
Если s/// не выполнил успешного замещения с момента последнего чтения строки входных данных и с момента последней команды t или T, то переходит к метке; если метка опущена, переходит в конец скрипта. Это расширение GNU.
w filename
Записывает текущий буфер шаблона в filename.
W filename
Записывает первую строку текущего буфера шаблона в filename. Это расширение GNU.
x
Обменивает содержимое буферов удержания и шаблона.
y/source/dest/
Транслитерирует символы в буфере шаблона, которые появляются в source, на соответствующий символ в dest.
Адреса
Команды sed могут быть заданы без адресов, в этом случае команда будет выполнена для всех строк ввода; с одним адресом, в этом случае команда будет выполнена только для строк ввода, которые соответствуют этому адресу; или с двумя адресами, в этом случае команда будет выполнена для всех строк ввода, которые соответствуют включительному диапазону строк, начинающемуся с первого адреса и продолжающемуся до второго адреса. Три вещи, которые следует отметить в адресных диапазонах: синтаксис addr1,addr2 (т.е. адреса разделены запятой); строка, с которой сопоставлен addr1, всегда будет принята, даже если addr2 выберет более раннюю строку; и если addr2 является регулярным выражением, оно не будет проверяться для строки, с которой сопоставлен addr1.
После адреса (или адресного диапазона) и перед командой может быть вставлен символ !, который указывает, что команда должна быть выполнена только в том случае, если адрес (или адресный диапазон) не соответствует.
Поддерживаются следующие типы адресов:
number Соответствует указанному номеру строки (который накапливается последовательно для всех файлов, если только не указан параметр -s в командной строке).
first~step Соответствует каждой step-й строке, начиная со строки first. Например, `sed -n 1~2p` выведет все строки с нечетными номерами во входном потоке, а адрес 2~5 будет соответствовать каждой пятой строке, начиная со второй. first может быть равен нулю; в этом случае sed работает так, как если бы он был равен step. (Это расширение.)
$ Соответствует последней строке.
/regexp/ Соответствует строкам, соответствующим регулярному выражению regexp. Соответствие выполняется в текущем буфере шаблонов, который может быть изменен с помощью команд, таких как `s///`.
\cregexpc Соответствует строкам, соответствующим регулярному выражению regexp. Символ c может быть любым.
GNU sed также поддерживает некоторые специальные 2-адресные формы:
0addr2 Начните с состояния "соответствует первому адресу", пока не будет найден addr2. Это похоже на 1addr2, за исключением того, что если addr2 соответствует самой первой строке ввода, форма 0,addr2 будет в конце своего диапазона, тогда как форма 1,addr2 все еще будет в начале своего диапазона. Это работает только тогда, когда addr2 является регулярным выражением.
addr1,+N Соответствует addr1 и N строкам, следующим за addr1.
addr1,~N Соответствует addr1 и строкам, следующим за addr1, до следующей строки, номер строки которой является кратным N.
РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ
POSIX.2 BRE должны поддерживаться, но они не полностью поддерживаются из-за проблем с производительностью. Последовательность \n в регулярном выражении соответствует символу новой строки, и аналогично для \a, \t и других последовательностей. Параметр -E переключает на использование расширенных регулярных выражений; он поддерживался GNU sed на протяжении многих лет и теперь включен в POSIX.
ОШИБКИ
Отправляйте сообщения об ошибках по адресу _. Пожалуйста, также включите вывод команды sed --version в текст вашего сообщения, если это возможно.
АВТОР
Написано Jay Fenlason, Tom Lord, Ken Pizzini, Paolo Bonzini, Jim Meyering и Assaf Gordon.
Эта программа sed была создана с поддержкой SELinux. SELinux отключен в этой системе.
Домашняя страница GNU sed: [https://www.gnu.org/software/sed/]. Общая справка по использованию программного обеспечения GNU: [https://www.gnu.org/gethelp/>. Отправляйте сообщения об ошибках по адресу: <_].
СМОТРИТЕ ТАКЖЕ
awk(1), ed(1), grep(1), tr(1), perlre(1), sed.info, любая из различных книг о sed, часто задаваемые вопросы по sed (http://sed.sf.net/grabbag/tutorials/sedfaq.txt), http://sed.sf.net/grabbag/.
Полная документация для sed поддерживается в виде руководства Texinfo. Если программы info и sed установлены на вашем сайте должным образом, команда
info sed
должна предоставить вам доступ к полному руководству.