我需要从日志文件中获取值,值可能不同,需要得到它。
string的例子:
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个命令,结果就像
第一个命令(testing运行)
1042
第二个命令(失败)
0
第三个命令(错误)
0
第四个commad(跳过)
0
您可以使用以下四个命令分别获取“ 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'
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
我不知道这是否是你想要的,但假设你正在搜索的行将是这种格式:
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 /部分来调整最终输出。
像这样的东西:
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"
你的意思是这样吗?
sed -rn 's/^Tests run:\s*//;s/,[^:]+:\s*/\n/gp' log.log
结果:
1042 0 0 0
这可能适合你:
echo "Tests run: 1042, Failures: 0, Errors: 0, Skipped: 0" | sed '/^Tests/{s/[^0-9,]//g;y/,/\n/;}' 1042 0 0 0