如何计算包含特定字符串但不包含其他字符串的文件数?

时间:2015-08-05 12:12:38

标签: bash

我们每天运行Selenium测试来测试我们的网站和扩展。如果测试失败,则输出包含字符串FAILED(如果它包含其他字符串则无关紧要)。如果通过,则输出不包含字符串FAILED但必须包含字符串OK。如果输出不包含两个字符串(通常在它为空时),则测试失败。我们用于计算失败的测试的代码是这样的:

None

但问题是,如果两个字符串都不在输出中(例如当文件为空时),它会忽略OK字符串,它会计算通过的测试。我们如何正确计算通过的测试和失败的测试?

1 个答案:

答案 0 :(得分:1)

循环文件并执行适当的检查。搜索字符串将超过shell计算所产生的任何开销。

declare -i fail=0
declare -i success=0

for fileName in *
do
  if grep -q FAILED "$fileName"
  then
    fail+=1
  elif grep -q OK "$fileName"
  then
    success+=1
  else
    fail+=1
  fi
done

printf "%d failed, %d succeeded\n" "$fail" "$success"

另一种方法是传递文件名列表。计算FAILED 的文件数量,其中包含OK

grep -l OK $(grep -L FAILED *) | wc -l

计算其中有FAILED个文件或 FAILED 以及 OK的文件数量:

(grep -l FAILED *; egrep -L 'FAILED|OK' *) | wc -l

计数方法会出现奇怪的文件名(即文件名中的空格或换行符等)的问题,但是你可以放心地假设在你的特殊情况下文件名是正确的。