我有这个行不通的问题。
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显示相同的标记组?
答案 0 :(得分:2)
您只能在正则表达式的匹配侧使用\g{name}
(或\k<name>
)。您可以在替换侧使用$+{name}
:
echo "aabbaaccdd" | perl -w -pe "s/(?<Naa>aa)(?=bb\g{Naa}).*/$+{Naa}/;"
打印出
aa
这是因为命名捕获放置在哈希表%+
中。
编辑:我在撰写本文时,在问题的评论中,威克多·史翠比奥(WiktorStribiżew)击败了我。