linux - 如何使用 grep 命令找到不包含字母 "e"的 8 个字母单词的数量?

标签 linux bash unix grep wc

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

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

cat *.txt | grep -Eo "\w+" | grep -i ".*[^e].*"

我需要包含 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]"

此命令可以找到包含 8 个字符的单词,但效果很差,因为我必须重复“[a-z]”8 次。我以为它也可以是“[a-z]{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].*"

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

最佳答案

你可以使用这个grep:

grep -hEiwo '[a-df-z]{8}' *.txt

这里:

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

关于linux - 如何使用 grep 命令找到不包含字母 "e"的 8 个字母单词的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64927014/

相关文章:

linux - 虚拟环境创建错误

linux - 如何将 ESC 传递给标准输入?

linux - while 循环读取命令正在打印位置而不仅仅是文件名 - 这是为什么?

linux - 从文本文件返回数字 - BASH

c - 为什么 stdio.h 打印写入使用文件描述符打开的文件?

linux - 在 winSCP 中切换用户

linux - 如何在 bash 中自定义选择循环

linux - 使用 shell 脚本读取多个文件/文件夹

linux - 递归脚本按名称删除除 2 之外的所有文件夹

linux - 使来自子进程的 shell 命令在父进程中执行(以锁定 shell)