创建egrep命令时遇到麻烦,该命令打印标准输入中的所有行,其中包含4个字母的子字符串,该字符串出现3次。例如, 该行:
考虑这行,并且单词side side sideline
应该被打印,因为它包含3次子串“ side”。
到目前为止,我所拥有的是egrep ([a-zA-Z]{4})
,它仅显示了字符串的四个连续字母。我的目标是返回整行,但其中包含“ side” 3次。我对正则表达式还是陌生的。谁能向我解释如何解决这个问题?
答案 0 :(得分:2)
似乎您正在寻找
grep -E '([[:alpha:]]{4})(.*\1){2}' file
请参见regex demo和an online grep
demo。
该表达式在右边找到这个确切的子字符串的四个连续字母和两个重复,可以用任何0+字符分隔。
详细信息
([[:alpha:]]{4})
-捕获组#1:四个字母(由于范围/间隔/限制量词{4}
)([[:alpha:]]
匹配任何字母)(.*\1){2}
-两次重复:
.*
-任意0个以上的字符\1
-捕获到组1中的值(=与[[:alpha:]]{4}
匹配的文本)。