bash字符串替换:引用匹配的子表达式

时间:2018-11-02 19:52:55

标签: regex bash

UPD伙计们,上面的陈述“这个问题已经在这里有了答案:”完全是错误的:那里没有答案。我知道sed,但这不是一个选择。看来这是不可能的。不是在bash中,不是在单线中,不是在2018年。

bash字符串替换支持正则表达式,但我找不到将匹配的字符串的一部分包含在替换中的方法。

以下内容无法满足我的要求

$ x=AbcdAbdcAbefAbfe
$ echo ${x//Ab[ef]/Zy\\1}
AbcdAbdcZy\1fZy\1e
$ echo ${x//Ab[ef]/AB\1}
AbcdAbdcAB1fAB1e

(事实上,我什至不能使用括号:

$ echo ${x//Ab/Zy}
ZycdZydcZyefZyfe
$ echo ${x//(Ab)/Zy}
AbcdAbdcAbefAbfe

我想要的可以通过一系列替换来实现:

$ x=AbcdAbdcAbefAbfe
$ t="$x"
$ t=${t//Abe/Zye}
$ t=${t//Abf/Zyf}
$ echo $t
AbcdAbdcZyefZyfe

但即使是[0-9],这也是一个漫长的故事。

代码运行很长,它应该是单行的,不会启动子流程。

编辑

评论中有 个答案。我在这里复制它:

这不是关于正则表达式的问题,并且该问题中的假设是错误的。问题中的第一句话是假的。参数扩展中的模式被视为全局。 – ghoti

您可能应该直接链接到this。该页面详细介绍了结束此讨论所需的一切。 – revo

0 个答案:

没有答案