Unix 如何通过sed读取travis日志上的junit结果?

Unix 如何通过sed读取travis日志上的junit结果?,unix,sed,Unix,Sed,我通过echo添加了3个样本跟踪 我读取日志文件 我想使用sed。我想知道我的all测试中是否有错误 run.sh #!/usr/bin/env bash echo "[1565214900.443][SEVERE]: Timed out receiving message from renderer: -0.011" echo "[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.16 s - in

我通过
echo
添加了3个样本跟踪

我读取日志文件

我想使用
sed
。我想知道我的all测试中是否有错误

run.sh

#!/usr/bin/env bash

echo "[1565214900.443][SEVERE]: Timed out receiving message from renderer: -0.011"
echo "[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.16 s - in com.github.noraui.browser.AuthUT"
echo "[INFO] Running com.github.noraui.gherkin.GherkinConditionedLoopedStepUT"

curl -s "https://api.travis-ci.org/jobs/${TRAVIS_JOB_ID}/log.txt?deansi=true" > nonaui.log

counterFailures=$(sed -n 's:.*\[INFO\] Tests run\: 4, Failures\:\(.*\), Errors\: 0, Skipped\: 0, Time elapsed.*:\1:p' nonaui.log | head -n 1)
echo "******** counter: $counterFailures"
我的结果是

$ ./run.sh
[1565214900.443][SEVERE]: Timed out receiving message from renderer: -0.011
[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.16 s - in com.github.noraui.browser.AuthUT
[INFO] Running com.github.noraui.gherkin.GherkinConditionedLoopedStepUT
******** counter: 
The command "./run.sh" exited with 0.

我的样本在线,我的样本结果在线

我认为这应该有效:

#!/usr/bin/env bash

echo "[1565214900.443][SEVERE]: Timed out receiving message from renderer: -0.011" > nonaui.log
echo "[INFO] Tests run: 4, Failures: 10, Errors: 0, Skipped: 0, Time elapsed: 7.16 s - in com.github.noraui.browser.AuthUT" >> nonaui.log
echo "[INFO] Running com.github.noraui.gherkin.GherkinConditionedLoopedStepUT" >> nonaui.log

counterFailures=$(sed -n 's/.*\[INFO\] Tests run: 4, Failures:\(.*\), Errors: 0, Skipped: 0, Time elapsed.*/\1/p' nonaui.log | head -n 1)
echo "******** counter: $counterFailures"
我猜代码顶部的echo语句是示例,因为您没有显式地共享它们。这是我运行它时看到的:

$ ./run.sh 
******** counter:  10
$ 
两件事:

  • 您使用了
    作为sed分隔符,但您的模式中也有冒号
  • 方括号还表示RE的某些内容。你需要逃离他们

  • 您的regexp模式太特殊,无法处理任何输入

    sed:

    GNU grep:

    counterFailures=$(grep -oP 'Tests run.*Failures: \K[0-9]+' nonaui.log | head -n 1)
    

    提供一个nonaui.log的例子就好了。noraui.log是3
    echo
    sample。您可以在网上找到我的示例:和我的示例结果:您知道我是否有多个
    echo“[INFO]测试运行:4,失败…
    ?我希望获取所有出现的情况。我尝试使用
    \g
    ,但不起作用。
    counterFailures=$(grep -oP 'Tests run.*Failures: \K[0-9]+' nonaui.log | head -n 1)