【发布时间】:2020-02-22 21:21:05
【问题描述】:
有没有办法让sed 将捕获组通过管道传输到另一个程序,使正则表达式的 RHS 中的 \1 等于该程序的输出?
比如跑步
sed 's/lorem ipsum \(foobar\)/\1/g' file.txt
是否将“foobar”通过另一个程序(例如,tr 'o' 'a')使\1 成为“faabar”,而sed 将“lorem ipsum foobar”替换为“lorem ipsum faabar”?
这只是一个简单的例子。我意识到我可以在不使用tr 的情况下将“foobar”转换为“faabar”。
【问题讨论】:
-
发布输入和预期输出样本。它可能会以您认为的其他方式解决。
-
@Jotne 我添加了一个更完整的工作示例。
-
GNU
sed有一个/x选项;但是你正在尝试的东西在很多层面上都是错误的。使用具有适当 HTML 解析器的工具。您的代码可以很容易地在 Perl 中重新实现,但是 PHP 也没有这样的功能(更不用说用于逐行读取文件并应用正则表达式的功能了。不是说我会推荐 PHP 做任何事情)?跨度> -
有一个著名的笑话是尝试用正则表达式解析 HTML,但是 we are not supposed to link to it.
标签: regex sed replace pipe capture-group