Sed:在替换中使用匹配的文本

Sed: Use matched text in substitution

我如何使用 sed 以便在找到匹配项时,我可以在替换字段中使用它?

例如

echo "12a34" | sed 's/a/#bcd/g'
12abcd34

我应该用什么替换 # 以获得预期的结果?

使用&:

echo '12a34' | sed 's/a/&bcd/g'
12abcd34

&s/// 命令的替换子句中指的是模式匹配的内容,在本例中是 a

这个特殊情况并没有很好地展示它是如何工作的,因为 a 不是一个非常有趣的正则表达式,所以让我添加一个更好的例子:

echo foobar | sed 's/[fb]/&42/g'
f42oob42ar

其中 fb[fb] 匹配,随后替换为 f42b42