Perl Shell脚本转义的替换模式不起作用

时间:2019-02-03 11:46:21

标签: regex bash perl

我有这个行不通的问题。

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

它输出

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

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

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

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

我的语言环境是“ C”

如何解决?

更新:

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

1 个答案:

答案 0 :(得分:2)

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

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

打印出

aa

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

编辑:我在撰写本文时,在问题的评论中,威克多·史翠比奥(WiktorStribiżew)击败了我。