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

Find all lines with keyword and extract number

我想找到以单词开头的行:"ERRORS" 并从该行中提取数字。

部分文件:

...
[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 脚本中的变量。

由于 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 打印最后一个字段