在替换之前,将sed捕获组通过外部程序传递?

时间:2019-10-27 05:33:37

标签: regex sed replace pipe capture-group

sed是否可以将捕获组通过管道传递到另一个程序,从而使正则表达式的RHS中的\1等于该程序的输出?

例如,运行

sed 's/lorem ipsum \(foobar\)/\1/g' file.txt

将通过另一个程序(例如,tr 'o' 'a')通过管道“ foobar”使\1成为“ {faabar”,sed将“ lorem ipsum foobar”替换为“ lorem ipsum faabar” ?

这只是一个简单的示例。我知道我可以不用使用tr就可以将“ foobar”转换为“ faabar”。

1 个答案:

答案 0 :(得分:0)

使用执行选项:

  

e
  此命令允许将来自Shell命令的输入通过管道传递到模式空间。如果进行了替换,则执行在模式空间中找到的命令,并用其输出替换模式空间。尾随换行符被禁止;如果要执行的命令包含NUL字符,则结果不确定。这是GNU sed扩展。

source; original source