Linux 查找包含关键字的所有行并提取编号
我想找出从“错误”这个词开始的那一行,以及那一行的EXTRACT编号 文件的一部分: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
...
[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
用作实验,但到目前为止我还没有遇到任何问题。。(有关已知的GNU grep问题,请参见)-P
使用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
用作实验,但到目前为止我还没有遇到任何问题。。(有关已知的GNU grep问题,请参见)-P
使用awk的替代解决方案
$ awk '/ERRORS:/ && NF==2{print $NF}' .validation.log
148
包含/ERRORS://&NF==2
的匹配行,并且只有两个字段(默认情况下,一个或多个连续空格是字段分隔符)ERRORS:
打印最后一个字段打印$NF