我正在尝试编写一个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,有人可以帮帮我吗?
答案 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:]
是一个字符类的表达式。要用作正则表达式字符集,它需要额外的括号。你可能已经知道了这一点,因为看起来你已经开始这么做了,但是未打开括号。