如何使用 grep 命令查找不包含字母“e”的 8 个字母单词的数量?

doe*_*247 2 unix linux bash grep wc

我想在多个文本文件 (*.txt) 中找到不包含字母“e”的 8 个字母单词的数量。在这个过程中,我遇到了两个问题:我对量词缺乏理解以及如何排除字符。

我对 Unix 终端很陌生,但这是我尝试过的:

cat *.txt | grep -Eo "\w+" | grep -i ".*[^e].*"
Run Code Online (Sandbox Code Playgroud)

我需要包含 cat 命令,否则它会包含管道中文本文件的名称。第二个管道是将所有单词放在一个列表中,它可以工作,但最后一个管道是为了找到所有没有字母“e”的单词,但似乎不起作用。(我认为“. ”表示没有或任意数量的任何字符,后跟一个不是“e”的字符,然后是另一个“. ”表示没有或任意数量的任何字符。)

cat *.txt | grep -Eo "\w+" | grep -wi "[a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z]"
Run Code Online (Sandbox Code Playgroud)

这个命令可以找到包含 8 个字符的单词,但它非常无效,因为我必须重复 "[az]" 8 次。我认为它也可能是“[az]{8}”,但这似乎不起作用。

cat *.txt | grep -Eo "\w+" | grep -wi "[a-z][a-z][a-z][a-z][a-z][a-z][a-z][a-z]" | grep -i ".*[^e].*"
Run Code Online (Sandbox Code Playgroud)

所以最后,这将是我最好的猜测,但是,第三个管道无效,最后一个管道不起作用。

anu*_*ava 7

你可以使用这个grep

grep -hEiwo '[a-df-z]{8}' *.txt
Run Code Online (Sandbox Code Playgroud)

这里:

  • [a-df-z]{8}: 匹配所有字母,除了 e
  • -h: 不要在输出中打印文件名
  • -i: 忽略大小写搜索
  • -o:打印匹配
  • -w: 匹配完整的单词