我目前正在尝试在 Bash 中编写一个可以运行一组单元/集成测试的脚本。我已经完成了该部分的工作,但我现在需要的是能够在最后输出一个摘要。我一直在尝试使用grep
ot 抓取包含数字后跟字符串的每一行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}
量词用于匹配一个或多个数字。需要反斜杠来赋予花括号特殊的含义。