首页 > 解决方案 > perl shell脚本转义替换模式不起作用

问题描述

我有这个不工作的问题。

echo "aabbccdd" | perl -w -pe "s/(?<Naa>aa)/\g{Naa}-$1/;"

它输出

无法识别的转义 \g 在 -e 第 1 行通过。

我的 perl 版本是“subversion 4 (v5.18.4)”

我的 bash 版本是“版本 4.2.53(1)-release (x86_64-redhat-linux-gnu)”

我的操作系统发行版是“Fedora release 20 (Heisenbug)”

我的语言环境是“C”

怎么解决 ?

更新:

如何按数字 1 显示相同的标记组?

标签: regexbashperl

解决方案


您只能在正则表达式的匹配\g{name}端使用(or \k<name>) 。您可以在替换端使用:$+{name}

echo "aabbaaccdd" | perl -w -pe "s/(?<Naa>aa)(?=bb\g{Naa}).*/$+{Naa}/;"

打印出来

aa

这是因为命名的捕获被放置在哈希表中%+

编辑:在我写这篇文章的时候,Wiktor Stribiżew 在问题的评论中击败了我。


推荐阅读