从 bash 输出生成报告

从 bash 输出生成报告

我目前正在尝试在 Bash 中编写一个可以运行一组单元/集成测试的脚本。我已经完成了该部分的工作,但我现在需要的是能够在最后输出一个摘要。我一直在尝试使用grepot 抓取包含数字后跟字符串的每一行failing,将其保存在变量中,然后在最后打印。

因此,失败输出的一个例子是

224 passing (3m)
47 failing

我想在最后打印的是类似的内容

service01 4 failing
service03 1 failing

到目前为止我所拥有的是:

OUTPUT=""
for service in ${array[*]}
do
  echo $service
  if [ $DO_API == 'true' ]
  then
    echo 'running API tests'
    OUTPUT+="$service API $(docker exec -it $service npm run api_test | tee /dev/tty | grep -e '[0-9]+ failing' )"
  fi

  if [ $DO_CI == 'true' ]
  then
    echo 'running CI tests'
    OUTPUT+="$service CI $(docker exec -it $service npm run ci | tee /dev/tty | grep -e '[0-9]+ failing' )"
  fi
  echo $'\n'
done

当测试失败时,上面的脚本没有显示任何输出,这让我相信这是我的 grep 语法错误。

我究竟做错了什么?

答案1

以下grep命令将返回所需的输出:

grep -E '[0-9]+ failing'

该模式[0-9]+匹配一​​位或多位数字。-E必须使用该选项才能grep将模式解释为扩展正则表达式。量词+未定义为基本正则表达式的一部分。

示例运行(使用文件):

$ cat testfile
224 passing (3m)
47 failing

$ grep -E '[0-9]+ failing' testfile
47 failing

顺便说一句,该模式还可以使用基本正则表达式(BRE)按以下方式实现:

$ grep '[0-9]\{1,\} failing' testfile
47 failing

在这种情况下,{n,m}量词用于匹配一个或多个数字。需要反斜杠来赋予花括号特殊的含义。

相关内容