使用grep检测重复的字符

时间:2012-10-23 14:51:39

标签: linux bash grep

我正在尝试编写一个grep(或egrep)命令,该命令将查找并打印“words.txt”中的任何行,这些行包含连续三次相同的小写字母。这三个字母可能会连续出现(如“mooo”中)或由一个或多个空格分隔(如“x x x”),但不会被任何其他字符分隔。

words.txt包含:

The monster said "grrr"!
He lived in an igloo only in the winter.
He looked like an aardvark.

这就是我认为命令应该是这样的:

grep -E '\b[^ ]*[[:alpha:]]{3}[^ ]*\b' 'words.txt'

虽然我知道这是错误的,但我不知道足够的语法来弄明白。使用grep,有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:4)

这对你有用吗?

grep '\([[:lower:]]\) *\1 *\1'

它需要一个小写字符[[:lower:]]并记住它\( ... \)。它试图匹配任意数量的空格_*(包括0),记住的字符\1,任意数量的空格,记住的字符。就是这样。

您可以尝试使用--color=auto运行它,看看它匹配的输入部分。

答案 1 :(得分:0)

试试这个。请注意,这与“mooo”不匹配,因为单词边界(\b)出现在“m”之前。

grep -E '\b([[:alpha:]]) *\1 *\1 *\b' words.txt

[:alpha:]是一个字符类的表达式。要用作正则表达式字符集,它需要额外的括号。你可能已经知道了这一点,因为看起来你已经开始这么做了,但是未打开括号。