【问题标题】:count number of lines in terminal output计算终端输出中的行数
【发布时间】:2012-09-09 13:30:39
【问题描述】:

在 SO 上找不到这个。我在终端中运行了以下命令:

>> grep -Rl "curl" ./

这将显示出现关键字 curl 的文件列表。我想计算文件的数量。我能想到的第一种方法是计算终端中输出的行数。我该怎么做?

【问题讨论】:

标签: bash terminal


【解决方案1】:

使用-l行数)开关将结果传送到wc

grep -Rl "curl" ./ | wc -l

【讨论】:

  • 我一直在使用grep "" -c,但这更好:)
  • 应该注意的是,这种管道到 wc 的技巧适用于任何输出,而不仅仅是 grep 输出。例如,它可以与 git diff 结合使用。
  • 为什么这是公认的答案?正如一些 cmets 提到的那样,应该使用内置函数 grep -c 而不是将输出通过管道传输到另一个程序。例如。您甚至不会使用 Word 以外的其他文本编辑器更改 Word 文档中的字符,对吗?
  • 这是公认的答案,因为该问题通常询问如何计算终端输出的行数。 grep -c 没有回答。
【解决方案2】:

将 EaterOfCode 的评论放在这里作为答案。

grep 本身也有 -c 标志,它只返回计数

所以命令和输出可能如下所示。

$ grep -Rl "curl" ./ -c
24

编辑:

虽然这个答案可能更短,因此看起来比公认的答案更好(即使用wc)。我不再同意这一点。我想记住你可以通过管道到wc -l 来计算行数更有用,因为你可以将它与grep 之外的其他程序一起使用。

【讨论】:

    【解决方案3】:

    如果最后一行以换行符结尾(我知道在这种情况下会这样),则管道到“wc”可能会更好
    但是,如果最后一行没有以换行符结尾,'wc -l' 会返回错误结果。

    例如:

    $ echo "asd" | wc -l
    

    将返回1

    $ echo -n "asd" | wc -l
    

    将返回0


    所以我经常使用的是grep <anything> -c

    $ echo "asd" | grep "^.*$" -c
    1
    
    $ echo -n "asd" | grep "^.*$" -c
    1
    

    这比wc -l 将返回的更接近现实。

    【讨论】:

      【解决方案4】:

      "abcd4yyyy" | grep 4 -c 给出的计数为1

      【讨论】:

      • 不清楚这增加了什么,其他答案在 6 年前还没有说得更好。
      猜你喜欢
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      相关资源
      最近更新 更多