查找包含关键字和提取编号的所有行
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
打印最后一个字段
我想找到以单词开头的行:"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
打印最后一个字段