Допустим, у нас есть следующее в качестве stdin (в качестве примера):
Life is temporary
Я хочу, чтобы sed заменил это на
Life is permanent
с командой где-то в духе
sed 's/Life<%XY=.*>temporary/Life%XYpermanent'
Конечно, я знаю, что вышеприведенная команда недействительна, она приведена в качестве примера. Я хочу сохранить все, что .*
соответствует, в переменную и хочу вызвать эту переменную в строке замены.
решение1
sed 's/Life\(.*\)temporary/Life\1permanent/'
Здесь \1
относится к первой паре скобок в шаблоне. Это единственная пара в этом случае, но в целом вы можете иметь больше пар, а затем вы можете использовать и т. д. \2
, \3
до \9
.
Скобки экранированы. Без \
них они воспринимались бы буквально и \1
не работали бы. Если вы используете sed -E
то это будет наоборот: (
будет специальным и \(
будет обозначать литерал (
(заметьте, в общем, это не единственное различие -E
):
sed -E 's/Life(.*)temporary/Life\1permanent/'
Это изменение делает наш sed
код более читабельным для людей.