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

Linux 查找包含关键字的所有行并提取编号,linux,bash,grep,text-processing,Linux,Bash,Grep,Text Processing,我想找出从“错误”这个词开始的那一行,以及那一行的EXTRACT编号 文件的一部分: ... [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

我想找出从“错误”这个词开始的那一行,以及那一行的EXTRACT编号

文件的一部分:

...
[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
  • 错误。*\h\K
    此处的
    \K
    选项有助于标记正则表达式的起点。。匹配到此点的字符串不会成为输出的一部分
  • 还要注意的是,
    mangrep
    警告不要将
    -P
    用作实验,但到目前为止我还没有遇到任何问题。。(有关已知的GNU grep问题,请参见)

使用awk的替代解决方案

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

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

$ grep -oP 'ERRORS.*\h\K\d+' .validation.log
148
  • 错误。*\h\K
    此处的
    \K
    选项有助于标记正则表达式的起点。。匹配到此点的字符串不会成为输出的一部分
  • 还要注意的是,
    mangrep
    警告不要将
    -P
    用作实验,但到目前为止我还没有遇到任何问题。。(有关已知的GNU grep问题,请参见)

使用awk的替代解决方案

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

谢谢你的帮助。谢谢你的帮助。