我需要从日志文件中获取值,值可能不同,需要获取它。
字符串示例:
Tests run: 1042, Failures: 0, Errors: 0, Skipped: 0
我尝试:
cat log.log | grep '^Test run:' | sed -e 's/^Test run: //'
但我得到: 1042,失败:0,错误:0,跳过:0
我需要4个结果就像
的命令第一个命令(测试运行)
1042
第二个命令(失败)
0
第三个命令(错误)
0
第四个commad(Skipped)
0
答案 0 :(得分:7)
您可以使用以下四个命令分别获取Tests run
,Failures
,Errors
和Skipped
的值:
cat log.log | sed 's/Tests run: \([0-9]\+\).*/\1/g'
cat log.log | sed 's/.*Failures: \([0-9]\+\).*/\1/g'
cat log.log | sed 's/.*Errors: \([0-9]\+\).*/\1/g'
cat log.log | sed 's/.*Skipped: \([0-9]\+\).*/\1/g'
答案 1 :(得分:2)
grep '^Tests run:' <<END | grep -o '[0-9]\+'
Tests run: 1042, Failures: 0, Errors: 0, Skipped: 0
junk
Tests run: 1, Failures: 2, Errors: 3, Skipped: 4
END
输出
1042
0
0
0
1
2
3
4
答案 2 :(得分:1)
我不确定这是否是您想要的,但假设您要搜索的行将采用以下格式:
Tests run: <integer>, Failures: <integer>, Errors: <integer>, Skipped: <integer>
以下内容可能适合您:
sed -e 's/^Tests run: \([0-9]*\), Failures: \([0-9]*\), Errors: \([0-9]*\), Skipped: \([0-9]\).*$/\1,\2,\3,\4/'
在名为test.log的文件中给出以下输入
Tests run: 1042, Failures: 0, Errors: 0, Skipped: 0
Tests run: 12, Failures: 0, Errors: 0, Skipped: 0
Tests run: 104, Failures: 1, Errors: 3, Skipped: 4
运行:
cat test.log | sed -e 's/^Tests run: \([0-9]*\), Failures: \([0-9]*\), Errors: \([0-9]*\), Skipped: \([0-9]\).*$/\1,\2,\3,\4/'
将产生以下输出:
1042,0,0,0
12,0,0,0
104,1,3,4
当然,您可以通过播放sed表达式的/ \ 1,\ 2,\ 3,\ 4 /部分来调整最终输出。
答案 3 :(得分:1)
这样的事情:
sed -n "s/.*Tests run: \([0-9]*\),.*/\1/p"
sed -n "s/.*Failures: \([0-9]*\),.*/\1/p"
sed -n "s/.*Errors: \([0-9]*\),.*/\1/p"
sed -n "s/.*Skipped: \([0-9]*\)$/\1/p"
答案 4 :(得分:0)
你的意思是这样吗?
sed -rn 's/^Tests run:\s*//;s/,[^:]+:\s*/\n/gp' log.log
结果:
1042
0
0
0
答案 5 :(得分:0)
这可能对您有用:
echo "Tests run: 1042, Failures: 0, Errors: 0, Skipped: 0" |
sed '/^Tests/{s/[^0-9,]//g;y/,/\n/;}'
1042
0
0
0