Shell 找到前三个以c开头的单词,在单词的某个地方有一个双e(ee),然后以t结尾?

Shell 找到前三个以c开头的单词,在单词的某个地方有一个双e(ee),然后以t结尾?,shell,unix,Shell,Unix,到目前为止我试过这个 [suakhand@ ~]$ cat words | grep -E '^c.*(.{2}).*\1.*t$' | head -3 但是我不知道如何找到带有双ee的三个单词。这里: cat words | grep '^c.*ee.*t$' | head -3 如果您使用的是GNU grep,则可以使用grep-m在给定数量的匹配行之后停止读取文件: grep -m 3 '^c[[:alpha:]]*ee[[:alpha:]]*t$' words grep自己读取文件

到目前为止我试过这个

[suakhand@ ~]$ cat words | grep -E '^c.*(.{2}).*\1.*t$' | head -3
但是我不知道如何找到带有双ee的三个单词。

这里:

cat words | grep '^c.*ee.*t$' | head -3

如果您使用的是GNU grep,则可以使用
grep-m
在给定数量的匹配行之后停止读取文件:

grep -m 3 '^c[[:alpha:]]*ee[[:alpha:]]*t$' words
grep
自己读取文件,因此无需将
cat
与管道一起使用

[[:alpha:]
匹配字母表字符,这可能比
*
更合适,具体取决于您的输入


我还假设
单词
每行包含一个单词,否则您最好使用带有
-o
-w
标题的解决方案。

如果您的输入文本文件每行只包含一个单词,您可以执行以下操作:

grep -m 3 -w 'c\w*ee\w*t' file
如果输入文本每行包含多个单词,则可以使用:

grep -m 3 -o -w 'c\w*ee\w*t' file | head -n 3

需要
head
的原因是
grep-m NUM
返回
NUM
行,因此如果在一行上有多个匹配项,则返回的
NUM
行将多于
NUM
行(由于
-o

为什么不简单地编写
ee
?顺便说一句,您的
cat
是,为了兼容性,它应该是
head-n3
。并非所有head实现都理解
-3
语法。请发布一些带有预期输出的示例数据。