2

我正在尝试编写一个 grep(或 egrep)命令,该命令将查找并打印“words.txt”中连续三次包含相同小写字母的任何行。这三个字母可能连续出现(如“mooo”)或由一个或多个空格分隔(如“xx 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,有人可以帮助我吗?

4

2 回答 2

4

这对你有用吗?

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

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

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

于 2012-10-23T15:01:33.427 回答
0

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

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

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

于 2012-10-23T15:07:05.817 回答