首页 > 解决方案 > 如何在正则表达式中输出模式的重复次数?

问题描述

我想用正则表达式输出模式的重复次数。例如,转换"aaad""3xad","bCCCCC""b5xC"。我想在sedor中执行此操作awk

我知道我可以匹配它,(.)\1+甚至可以捕获它((.)\1+)。但是如何获得重复次数并将该值插入到正则表达式或 sed 或 awk 中的字符串中?

标签: regexawksed

解决方案


Perl 来救援!

perl -pe 's/((.)\2+)/length($1) . "x$2"/ge'
  • -p逐行读取输入并在处理后打印
  • s///是类似于 sed 的替换
  • /e使替换评估为代码

例如

aaadbCCCCCxx -> 3xadb5xC2xx

推荐阅读