假设我们有以下内容作为标准输入(作为示例)
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
代码更易于人类阅读。