【问题标题】:Linux: Using grep command to find how many lines do not start with a vowelLinux:使用 grep 命令查找有多少行不以元音开头
【发布时间】:2018-03-01 04:10:00
【问题描述】:

所以我想出了两个命令:

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

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

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

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

【问题讨论】:

    标签: linux bash grep command


    【解决方案1】:

    这两个命令确实做了不同的事情,而且它们都没有真正按照你的想法做:

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

    你不能真正嵌套[^...] 表达式。相反,这个正则表达式被解释为[^[^aeiouAEIOU]] 连接。也就是说,它将匹配行中任何不是[^ 或元音字母和] 的字符组合。例如,这些字符串将匹配:b]c]#];];而这些不会:a]E]cd。而“anywhere in the line”是指上面的grep命令会统计aaab]i uc]等行数。

    至于你的第二条命令,

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

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

    实际上应该给出不以元音开头的行数的两个命令是:

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

    【讨论】:

      【解决方案2】:

      你也可以试试这个:

      grep -Ewcv "*[aeiou]*" filename.txt
      

      【讨论】:

        猜你喜欢
        • 2019-04-14
        • 1970-01-01
        • 2014-07-20
        • 2017-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-21
        相关资源
        最近更新 更多