Linux计算机上的实用程序将日志输出到“ stdout”。 在每一行中,都有一个字符串或一个整数,如下所示:
[ERROR] resource busy, retrying
0989282882
[DEBUG] starting process with pid 4028
7918361566
1037491392
[DEBUG] starting process with pid 4056
2873187983
7853738301
1290312037
[DEBUG] done with init
1872989829
[DEBUG] cleaning up
8917982882
(实际上要更长一些)
我想计算其中包含整数的行。
我已经使用:program | grep DEBUG | wc -l
来获取调试计数(与ERROR
相同)
但是我如何计算整数?他们没有像字符串一样的静态东西,我可以grep ...
答案 0 :(得分:3)
您可以在指定正则表达式后使用grep标识整数。
对于这种特殊情况,
grep -E "^[0-9]+" | wc -l
应该可以。
在这里
^表示行的开头
[0-9]表示0到9之间的任何数字
+表示一个或多个这样的数字
答案 1 :(得分:1)
您不需要wc,grep具有-c
program | grep -c -E -x '[[:digit:]]+'
-c
仅打印选定行的数量-E
扩展的正则表达式(您可以忽略它并使用模式[0-9]\+
)-x
匹配整行而不只是其中的一部分或者,因为您也提到了[DEBUG]
,所以您可以使用awk
进行一次通过(尤其是如果您的program
不是idempotent的话)
program | awk '/^[0-9]+$/ { numbers++ } /^\[DEBUG\]/ {debugs++} END { print numbers,debugs }'
答案 2 :(得分:0)
我会program | grep -E "^[0-9]+" | wc -l
这样做。这将匹配以1个或多个数字开头的行。似乎足够适合您的用例。
答案 3 :(得分:0)
program | grep '^[0-9].*$' | wc -l