|
Потоковый редактор - Stream editor. Thing that does s/// and other stuff
sed
usage: sed [-inrszE] [-e SCRIPT]...|SCRIPT [-f SCRIPT_FILE]... [FILE...]
Редактор потоков. Примените сценарии редактирования к строкам ввода.
-e Добавить SCRIPT в список
-f Добавить содержимое SCRIPT_FILE в список
-i Редактировать каждый файл на месте (-iEXT сохраняет файл резервной
копии с расширением EXT)
-n Нет вывода по умолчанию (используйте команду p для вывода совпадающих строк)
-r Использовать расширенный синтаксис регулярного выражения
-E Псевдоним POSIX для -r
-s Обрабатывать ввод файлы отдельно (подразумевается -i)
-z Используйте \0, а не \n в качестве разделителя строк ввода
СЦЕНАРИЙ — это одна или несколько КОМАНД, разделенных символами новой строки
или точкой с запятой.
Все -e СЦЕНАРИИ объединяются, как если бы они были разделены новой строкой,
за которой следует все -f SCRIPT_FILE
Если нет -e или -f, то первым аргументом является СЦЕНАРИЙ.
КОМАНДЫ применяются к каждой строке, если перед ними не стоит АДРЕС вида:
[АДРЕС[,АДРЕС]][!]КОМАНДА
АДРЕС — это номер строки (начиная с 1), /РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ/
или $ для последней строки (-s или -i делает ее последней строкой каждого файла).
Один адрес соответствует одной строке ADDRESS,
ADDRESS соответствует от первого до второго включительно.
Два регулярных выражения могут соответствовать нескольким диапазонам.
ADDRESS,+N заканчивается на N строк позже.
! инвертирует соответствие.
РЕГУЛЯРНЫЕ ВЫРАЖЕНИЯ начинаются и заканчиваются одним и тем же символом
(любым, кроме обратной косой черты или новой строки).
Чтобы использовать разделитель в регулярном выражении, экранируйте его с помощью
обратной косой черты и escape-последовательности printf
(\abcefnrtv и восьмеричные, шестнадцатеричные и юникодные) работают.
Пустое регулярное выражение повторяет предыдущее.
Регулярные выражения ADDRESS требуют, чтобы любой первый разделитель,
кроме / должен быть экранирован, чтобы отличить его от КОМАНД.
Sed читает каждую строку ввода, обрабатывает ее и записывает или отбрасывает.
перед прочтением следующего. Sed может запомнить одну дополнительную строку в отдельном
буфере (команды h, H, g, G и x) и может прочитать следующую строку ввода
раньше (команды n и N), но в остальном работает на отдельных строках.
Каждая КОМАНДА начинается с одного символа. Команды без аргументов:
! Запустите эту команду, когда АДРЕС _не_ совпадает.
{ Начать новый блок команд, продолжая до соответствующего "}".
Командные блоки вложены друг в друга и могут иметь адреса, применимые ко всему блоку.
} Конец командного блока (эта КОМАНДА не может иметь адрес)
d Удалите эту строку и перейдите к следующей
(игнорирует остальные КОМАНДЫ)
D Удалить одну строку ввода и перезапустить команду SCRIPT (аналогично «d»
если вы не склеили линии вместе с буквой «N» или чем-то подобным)
g Получить сохраненную строку (перезаписать текущую строку)
G Получить запомненную строку (добавив текущую строку)
h Запомнить эту строку (перезаписать сохраненную строку)
H Запомнить эту строку (дополнить запомненную строку, если она есть)
l Печатать экранирование строки \abfrtvn, восьмеричное экранирование
других непечатаемых символов, переносите строки по ширине терминала с помощью \,
добавляйте $ в конец строки.
n Печатать вывод по умолчанию и читать следующую строку поверх текущей строки
(выход в конце EOF)
N Добавить \n и следующую строку ввода к этой строке. Выйти в EOF без
вывод по умолчанию. Увеличивает счетчик строк для ADDRESS и "=".
p Распечатать эту строку
P Распечатать эту строку до первой новой строки (от "N")
q Выйти (распечатать вывод по умолчанию, больше не обрабатываются команды
и не читаются строки)
x Заменить эту строку сохраненной строкой (перезаписать в обоих направлениях)
= Напечатать номер текущей строки (плюс новая строка)
# Комментарий, игнорирует остальную часть этой строки SCRIPT (до новой строки)
Команды, принимающие аргумент:
: LABEL Цель для команд перехода
a ТЕКСТ Добавляет текст к выводу перед чтением следующей строки
b Ветвь LABEL, переходит к :LABEL (без LABEL до конца SCRIPT)
c ТЕКСТ Удалить соответствующий диапазон АДРЕСА и вместо этого вывести ТЕКСТ.
i ТЕКСТ Вставка текста (немедленный вывод)
r FILE Добавляет содержимое FILE к выводу перед чтением следующей строки.
s/S/R/F Поиск регулярного выражения S заменить совпадение на R
с использованием флагов F.
Разделитель это что угодно, кроме \n или \, экранируйте с помощью \
для использования в S или R.
Printf с escape работает. Неэкранированный & в R становится полным совпадающим текстом,
\1 через \9 = скобочное подвыражение из S.
\ в конце строки добавляет следующую строку СЦЕНАРИЯ.
Флаги в F:
[0-9] Число N - подставить только N-е совпадение
g Global - заменить все совпадения
i/I - Игнорировать регистр при сопоставлении
p - Печатать результирующую строку, когда совпадение найдено и заменено
w [файл] - Записать (добавить) строку в файл при замене соответствия
t LABEL Test - переход, если команда s/// соответствует этой строке
после последней проверки
T LABEL Test false - переход к :LABEL только в том случае, если
ни один s/// не нашел совпадения
w ФАЙЛ - Записать (добавить) строку в файл
y/старый/новый/ - Заменить каждый символ в «старом» на соответствующий символ
в «новом» (со стандартными экранами обратной косой черты, разделитель может быть
любой повторяющийся символ, кроме \ или \n)
Аргументы TEXT (для aci) могут заканчиваться символом "\" без экранирования для добавления
следующую строку (ведущие пробелы не пропускаются) и обработает ";" как буквенный символ
(вместо этого используйте "\;").
usage: sed [-inrszE] [-e SCRIPT]...|SCRIPT [-f SCRIPT_FILE]... [FILE...]
Stream editor. Apply editing SCRIPTs to lines of input.
-e Add SCRIPT to list
-f Add contents of SCRIPT_FILE to list
-i Edit each file in place (-iEXT keeps backup file with extension EXT)
-n No default output (use the p command to output matched lines)
-r Use extended regular expression syntax
-E POSIX alias for -r
-s Treat input files separately (implied by -i)
-z Use \0 rather than \n as input line separator
A SCRIPT is one or more COMMANDs separated by newlines or semicolons.
All -e SCRIPTs are combined as if separated by newlines, followed by all -f
SCRIPT_FILEs. If no -e or -f then first argument is the SCRIPT.
COMMANDs apply to every line unless prefixed with an ADDRESS of the form:
[ADDRESS[,ADDRESS]][!]COMMAND
ADDRESS is a line number (starting at 1), a /REGULAR EXPRESSION/, or $ for
last line (-s or -i makes it last line of each file). One address matches one
line, ADDRESS,ADDRESS matches from first to second inclusive. Two regexes can
match multiple ranges. ADDRESS,+N ends N lines later. ! inverts the match.
REGULAR EXPRESSIONS start and end with the same character (anything but
backslash or newline). To use the delimiter in the regex escape it with a
backslash, and printf escapes (\abcefnrtv and octal, hex, and unicode) work.
An empty regex repeats the previous one. ADDRESS regexes require any
first delimiter except / to be \escaped to distinguish it from COMMANDs.
Sed reads each line of input, processes it, and writes it out or discards it
before reading the next. Sed can remember one additional line in a separate
buffer (the h, H, g, G, and x commands), and can read the next line of input
early (the n and N commands), but otherwise operates on individual lines.
Each COMMAND starts with a single character. Commands with no arguments are:
! Run this command when the ADDRESS _didn't_ match.
{ Start new command block, continuing until a corresponding "}".
Command blocks nest and can have ADDRESSes applying to the whole block.
} End command block (this COMMAND cannot have an address)
d Delete this line and move on to the next one
(ignores remaining COMMANDs)
D Delete one line of input and restart command SCRIPT (same as "d"
unless you've glued lines together with "N" or similar)
g Get remembered line (overwriting current line)
G Get remembered line (appending to current line)
h Remember this line (overwriting remembered line)
H Remember this line (appending to remembered line, if any)
l Print line escaping \abfrtvn, octal escape other nonprintng chars,
wrap lines to terminal width with \, append $ to end of line.
n Print default output and read next line over current line (quit at EOF)
N Append \n and next line of input to this line. Quit at EOF without
default output. Advances line counter for ADDRESS and "=".
p Print this line
P Print this line up to first newline (from "N")
q Quit (print default output, no more commands processed or lines read)
x Exchange this line with remembered line (overwrite in both directions)
= Print the current line number (plus newline)
# Comment, ignores rest of this line of SCRIPT (until newline)
Commands that take an argument:
: LABEL Target for jump commands
a TEXT Append text to output before reading next line
b LABEL Branch, jumps to :LABEL (with no LABEL to end of SCRIPT)
c TEXT Delete matching ADDRESS range and output TEXT instead
i TEXT Insert text (output immediately)
r FILE Append contents of FILE to output before reading next line.
s/S/R/F Search for regex S replace match with R using flags F. Delimiter
is anything but \n or \, escape with \ to use in S or R. Printf
escapes work. Unescaped & in R becomes full matched text, \1
through \9 = parenthetical subexpression from S. \ at end of
line appends next line of SCRIPT. The flags in F are:
[0-9] A number N, substitute only Nth match
g Global, substitute all matches
i/I Ignore case when matching
p Print resulting line when match found and replaced
w [file] Write (append) line to file when match replaced
t LABEL Test, jump if s/// command matched this line since last test
T LABEL Test false, jump to :LABEL only if no s/// found a match
w FILE Write (append) line to file
y/old/new/ Change each character in 'old' to corresponding character
in 'new' (with standard backslash escapes, delimiter can be
any repeated character except \ or \n)
The TEXT arguments (to a c i) may end with an unescaped "\" to append
the next line (leading whitespace is not skipped), and treat ";" as a
literal character (use "\;" instead).
|
|