所以我想出了两个命令:
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]
,c
,d
。 “行中的任何地方”意味着上面的grep
命令将对诸如aaab]
,i uc]
等行进行计数。至于第二条命令
grep -v -c [^aeiouAEIOU] filename.txt
在这里你有双重否定。首先,
[^aeiouAEIOU]
与元音以外的任何字符匹配。另一方面,传递给-v
的grep
选项会使匹配反转,因此它将匹配[^aeiouAEIOU]
不匹配的任何行。基本上,最终的结果是您要告诉grep
:“计算除aeiouAEIOU
之外没有符号的所有行”。也就是说,它将仅计算仅包含元音的行。实际上应该给您的不是以元音开头的行数的两个命令是:
grep -c ^[^aeiouAEIOU] filename.txt
grep -v -c ^[aeiouAEIOU] filename.txt