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

时间:2017-12-17 15:09:40

标签: bash unix grep

示例输入:

123123123 aaaaa  abababab  aaab baaa abcde1abcde1
aaaaaa 1212121212

预期产出:

123123123
abababab
abcde1abcde1
aaaaaa

这是我尝试过的:

egrep '(.)\1\1{2,4}' test

1 个答案:

答案 0 :(得分:1)

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

  

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

     

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

据我所知,

egrep已弃用且grep -E等效


向OP的尝试添加-o选项,以及-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次