如何使用 sed 的替代正则表达式模式作为变量?

如何使用 sed 的替代正则表达式模式作为变量?

假设我们有以下内容作为标准输入(作为示例)

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代码更易于人类阅读。

相关内容