所以我想出了两个命令:

1:grep -c [^[^aeiouAEIOU]] filename.txt;结果:52331

2:grep -v -c [^aeiouAEIOU] filename.txt;结果:52333

这两个命令对我来说是相同的,但结果不同。

请帮助,这对我来说毫无意义。

最佳答案

这两个命令确实可以做不同的事情,但它们实际上都没有您的想法:

grep -c [^[^aeiouAEIOU]] filename.txt

您不能真正嵌套[^...]表达式。相反,此正则表达式被解释为[^[^aeiouAEIOU]]串联。也就是说,它将匹配行中不是[^或元音的任何字符和]的任何组合。例如,这些字符串将匹配:b]c]#];];而这些不会:a]E]cd。 “行中的任何地方”意味着上面的grep命令将对诸如aaab]i uc]等行进行计数。

至于第二条命令
grep -v -c [^aeiouAEIOU] filename.txt

在这里你有双重否定。首先,[^aeiouAEIOU]与元音以外的任何字符匹配。另一方面,传递给-vgrep选项会使匹配反转,因此它将匹配[^aeiouAEIOU]不匹配的任何行。基本上,最终的结果是您要告诉grep:“计算除aeiouAEIOU之外没有符号的所有行”。也就是说,它将仅计算仅包含元音的行。

实际上应该给您的不是以元音开头的行数的两个命令是:
grep -c ^[^aeiouAEIOU] filename.txt
grep -v -c ^[aeiouAEIOU] filename.txt

08-26 21:39