bash条件语句或正则表达式

时间:2014-08-21 16:30:24

标签: regex bash if-statement logic

我有一个测试文件,记录最后一行的失败次数。我通过检查此行来确定测试是否通过。由于错误,通过测试将始终有一个失败。传递的行如下所示:

FAILED : - Failures   = 1

迄今为止我的代码是:

if [[ $(tail -n 1 temp.txt) != "FAILED : - Failures   = 1" ]]; then 
   echo "FAILED"
fi

但是,对于不同的软件分支,'FAILED'一词已替换为'WARNING',例如

WARNING : - Failures   = 1

我试图将一个正则表达式写成OR 'WARNING''FAILED',但到目前为止它还没有用。

1 个答案:

答案 0 :(得分:2)

你可以使用extglob:

if [[ $(tail -n 1 temp.txt) != @(WARNING|FAILED)" : - Failures   = 1" ]]
then
  echo "FAILED"
fi

@(pattern1|pattern2|..)是一个与给定模式匹配的bash glob。

根据您的输入,您可以使用进一步的模式匹配来使匹配更具弹性。例如,包含单词“WARNING”或“FAILED”后跟单词“Failures”的字符串可与

匹配
[[ $(tail -n 1 temp.txt) != *@(WARNING|FAILED)*"Failures"* ]]

有趣的事实:extglobs是正则表达式,它们只是不使用其他UNIX工具所使用的规范语法。