提取仅具有重复字符集2-4次的单词

问题描述 投票:1回答:1

样本输入:

123123123 aaaaa  abababab  aaab baaa abcde1abcde1
aaaaaa 1212121212

预期产量:

123123123
abababab
abcde1abcde1
aaaaaa

这是我试过的:

egrep '(.)\1\1{2,4}' test
bash unix grep
1个回答
1
投票

假设你的grep版本支持-o-w选项

-o, - only-matching仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上。

-w, - word-regexp仅选择包含构成整个单词的匹配项的行。测试是匹配的子字符串必须位于行的开头,或者前面是非单词构成字符。同样,它必须位于行的末尾或后跟非单词构成字符。单词构成字符是字母,数字和下划线。

据我所知,egrep已被弃用,而grep -E则相同

添加-o选项到OP的尝试,以及-w以避免匹配的单词部分

$ grep -owE '(.)\1\1{2,4}' ip.txt
aaaaa
aaaaaa

改变正则表达式

$ grep -owE '(.{1,})\1{1,3}' ip.txt
123123123
abababab
abcde1abcde1
aaaaaa
  • .{1,}要重复的一个或多个字符
  • \1{1,3}最多4次,所以我们需要再次匹配至少一次,最多再次3次
© www.soinside.com 2019 - 2024. All rights reserved.