Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何找到不包含字母“的8个字母单词的数量;e‘;,使用grep命令?_Linux_Bash_Unix_Grep_Wc - Fatal编程技术网

Linux 如何找到不包含字母“的8个字母单词的数量;e‘;,使用grep命令?

Linux 如何找到不包含字母“的8个字母单词的数量;e‘;,使用grep命令?,linux,bash,unix,grep,wc,Linux,Bash,Unix,Grep,Wc,我想在一些文本文件(*.txt)中查找不包含字母“e”的8个字母单词的数量。在这个过程中,我遇到了两个问题:我对量词缺乏理解,以及如何排除字符 我对Unix终端相当陌生,但这是我尝试过的: cat *.txt | grep -Eo "\w+" | grep -i ".*[^e].*" 我需要包含cat命令,因为它包含管道中文本文件的名称。第二个管道是将所有单词都放在一个列表中,这是可行的,但最后一个管道是用来查找所有没有字母“e”但似乎不起作用的单词。(

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

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

cat *.txt | grep -Eo "\w+" | grep -i ".*[^e].*"
我需要包含cat命令,因为它包含管道中文本文件的名称。第二个管道是将所有单词都放在一个列表中,这是可行的,但最后一个管道是用来查找所有没有字母“e”但似乎不起作用的单词。(我想,“.”表示任何字符的no或任何数字,后跟一个不是“e”的字符,后跟另一个“.”表示任何字符的no或任何数字。)

这个命令用于查找包含8个字符的单词,但它非常无效,因为我必须重复8次“[a-z]”。我想它也可以是“[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
    :匹配完整的单词

如果您对GNU
awk
没有问题,并且假设您只想打印准确的单词,并且一行中可能有多个匹配项,如果是这种情况,可以尝试以下操作

awk -v IGNORECASE="1" '{for(i=1;i<=NF;i++){if($i~/^[a-df-z]{8}$/){print $i}}}' *.txt

注意:考虑到您只希望在行中精确匹配8个字母。8个字母加标点符号的单词将被排除在外。

以下是GNU awk的一个疯狂想法:

awk 'BEGIN{FPAT="\\<\\w{8}\\>"}{c+=NF}END{print c}' file

感谢您在问题中分享您的努力,请继续。为了使问题更清晰,请您也分享您问题中的输入和预期输出示例。
[a-z]
-因此排除
e
,如
[a-df-z]
<代码>“[a-z]{8}”,但这似乎不起作用。我总是混淆基本正则表达式和扩展正则表达式。在普通的grep do
[a-z]\{8\}
中,在
grep-E
中,则
{8}
将起作用。@doelie247:使用
wc
而不是
regex
标记将更合适,因为您不是在寻找
wc
。请相应地编辑您的问题。您可以用C编写一些程序(请参阅then和…),或者在查找它们时用in-compiled by-in编写。如果您有很多文件,那么您可能也会对和感兴趣。同时阅读
awk '{for(i=1;i<=NF;i++){if(tolower($i)~/^[a-df-z]{8}$/){print $i}}}' *.txt
awk 'BEGIN{FPAT="\\<\\w{8}\\>"}{c+=NF}END{print c}' file
awk 'BEGIN{FPAT="\\<[a-df-z]{8}\\>"}{c+=NF}END{print c}' file
awk 'BEGIN{FPAT="\\<\\w{8}\\>"}{for(i=1;i<=NF;++i) if($i !~ /e/) c++}END{print c}' file