Regex EGREP命令,用于打印包含四个字母的子字符串的所有行

Regex EGREP命令,用于打印包含四个字母的子字符串的所有行,regex,unix,Regex,Unix,创建egrep命令时遇到问题,该命令会打印标准输入中包含四个字母的子字符串的所有行,这些字母会出现三次。例如 该行: 考虑一下这条线,单词side是一条边线 应打印,因为它包含子字符串“side”三次 到目前为止,我看到的是egrep([a-zA-Z]{4}),它只显示了字符串中四个连续字母的部分。我的目标是返回整行,而它包含“side”3次。我对正则表达式还是新手。有谁能解释一下我该如何修复这个表达式吗?看来您正在寻找 grep -E '([[:alpha:]]{4})(.*\1){2}' f

创建egrep命令时遇到问题,该命令会打印标准输入中包含四个字母的子字符串的所有行,这些字母会出现三次。例如 该行:

考虑一下这条线,单词side是一条边线

应打印,因为它包含子字符串“side”三次


到目前为止,我看到的是egrep([a-zA-Z]{4}),它只显示了字符串中四个连续字母的部分。我的目标是返回整行,而它包含“side”3次。我对正则表达式还是新手。有谁能解释一下我该如何修复这个表达式吗?

看来您正在寻找

grep -E '([[:alpha:]]{4})(.*\1){2}' file
请参阅和

表达式在右边找到四个连续的字母和该确切子字符串的两个重复,可以用任何0+字符分隔

详细信息

  • ([:alpha:]{4})
    -捕获组#1:4(由于范围/间隔/限制量词
    {4}
    )个字母(
    [:alpha:]
    匹配任何字母)
  • (.*\1){2}
    -两次重复:
    • *
      -任何0+字符
    • \1
      -捕获到组1中的值(=与
      [[:alpha:][4}
      匹配的文本)

    • 你是说
      grep-E'([:alpha:]{4})(.*\1){2}'
      ([:alpha:]{4})(.*\1){2}
      在右边找到4个字母和这个精确子字符串的两个重复(它们可以用任何0+字符分隔)。啊,我明白了。是的,这就是我试图实现的,在单词“考虑”中是子字符串“side”,它在这个特定文件中也出现了两次。我已尝试此命令,但该命令不返回任何内容。据我所知,该命令正在查找由4个字母组成的一组,后跟该子字符串的2个重复,而不考虑中间的字符。如果这是真的,那么我不明白为什么命令不返回文件。