Linux:使用grep命令查找多少行不以元音开头

时间:2017-09-20 07:51:06

标签: linux bash grep command

所以我提出了两个命令:

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

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

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

请帮忙,这对我没用。

2 个答案:

答案 0 :(得分:2)

这两个命令确实做了不同的事情,而且没有一个实际上按照你的想法行事:

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

你无法真正嵌套[^...]表达式。相反,此正则表达式被解释为[^[^aeiouAEIOU]]连接。也就是说,它会匹配行中的任何位置,而不是[^或元音和]的任何字符组合。例如,这些字符串将匹配:b]c]#];];这些不会:a]E]cd。并且“该行中的任何位置”表示上面的grep命令会计算aaab]i uc]等行。

至于你的第二个命令,

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

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

实际上应该的两个命令会为您提供不以元音开头的行数:

aeiouAEIOU

答案 1 :(得分:0)

你也可以试试这个:

void move(){
  if (keyPressed) {
    if (key == 'a') {
      shipLR = shipLR - 20; // Go left
      return;
    }

    if (key == 'd') {  // still inside if keyPressed
      shipLR = shipLR + 20; // Go right
      return;
    }

    if (key == 'w') {
      ...
    }
  }  // end of if keyPressed
}