Редактирование команд в sed
[2addr]s/BRE/replacement/flags
: заменитьстрока замены для экземпляров BRE в пространстве шаблонов.Любой символ, отличный от или , может использоваться вместо для разделения BRE и замены.Внутри BRE и замены сам разделитель BRE может использоваться в качестве литерального символа, если ему предшествует .
Строка замены должна сканироваться от начала до конца.Символ (&
), появляющийся при замене, должен быть заменен строкой, соответствующей BRE.Особое значение &
в этом контексте может быть подавлено предшествующим ему .Символы \n
, где n - это цифра, должны быть заменены текстом, соответствующим соответствующему выражению обратной ссылки.Если соответствующее выражение обратной ссылки не совпадает, то символы \n
должны быть заменены пустой строкой.Особое значение \n
, где n - это цифра в этом контексте, может быть исключено, если перед ним стоит .Для каждого встречающегося следующий символ теряет свое особое значение (если оно есть).
источник: POSIX SED
9.3.6 BRE, совпадающих с несколькими символами
Выражение обратной ссылки
\n
должно совпадать с той же (возможно, пустой) строкой символов, которая соответствовала подвыражению, заключенному между
\(
и
\)
, предшествующими
\n
.Символ
n
должен быть цифрой от
1
до
9
, указывающей
n
th подвыражение (то, которое начинается с n
\(
в начале шаблона и заканчивается соответствующей парной
\)
)Выражение недопустимо, если перед
\n
стоит меньше n подвыражений.Строка, соответствующая содержащемуся подвыражению, должна находиться в пределах строки, соответствующей содержащемуся подвыражению.Если содержащее подвыражение не совпадает или если нет совпадения для содержащегося подвыражения в строке, совпадающей с содержащим подвыражением, то выражения обратной ссылки, соответствующие содержащемуся подвыражению, не должны совпадать.Когда подвыражение соответствует более чем одной строке, выражение обратной ссылки, соответствующее подвыражению, должно ссылаться на последнюю найденную строку.Например, выражение
^\(.*\)\1$
соответствует строкам, состоящим из двух соседних появлений одной и той же подстроки, а выражение
\(a\)*\1
не соответствует
a
, выражение
\(a\(b\)*\)*\2
не соответствует
abab
, а выражение
^\(ab*\)*\1$
соответствует
ababbabb
, но не соответствует
ababbab
.
источник: Основные регулярные выражения POSIX