查找包含关键字和提取编号的所有行

时间:2018-01-30 11:21:41

标签: linux bash grep text-processing

我想找到从单词开头的行:“ERRORS”和该行的exctract数字。

文件的一部分:

...
[ERROR] No keywords and test cases defined in file
File path: libraries_instances.robot

TEST SUITES SUMMARY:
ERRORS:        148
WARNINGS:      89
CS VIOLATIONS: 201

我的解决方案是:

grep ERRORS .validation.log | grep -o -E '[0-9]+'

是否可以使它更好并且只使用一个grep?

最后,我想在我的bash脚本中将该值赋给变量。

1 个答案:

答案 0 :(得分:2)

由于linux标记存在问题,假设GNU grep -P选项可用

$ grep -oP 'ERRORS.*\h\K\d+' .validation.log
148
  • ERRORS.*\h\K此处\K选项有助于标记正则表达式的起点..到目前为止匹配的字符串不会是输出的一部分
  • 还注意到man grep警告使用-P作为实验,但到目前为止我还没有遇到任何问题..(请参阅https://debbugs.gnu.org/cgi/pkgreport.cgi?package=grep了解已知GNU grep个问题)


使用awk

的替代解决方案
$ awk '/ERRORS:/ && NF==2{print $NF}' .validation.log
148
  • /ERRORS:/ && NF==2匹配包含ERRORS:的行并且只有两个字段(默认情况下,一个或多个连续的空格是字段分隔符)
  • print $NF打印最后一个字段