【问题标题】:bash conditional statement OR regexbash 条件语句或正则表达式
【发布时间】:2014-08-21 16:30:23
【问题描述】:

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

FAILED : - Failures   = 1

我迄今为止有效的代码是:

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

但是,在不同的软件分支中,'FAILED' 已被替换为 'WARNING',例如

WARNING : - Failures   = 1

我正在尝试编写一个正则表达式来 OR 单词 'WARNING''FAILED' 但到目前为止它不起作用。

【问题讨论】:

  • 你可以试试[A-Z]*。你不需要这样 OR 任何东西。但是这种方式会匹配任何大写字母字符。所以如果你有类似SUCCESS: - Failures =1 的东西,它会匹配,但我非常怀疑这会发生。虽然我不确定bash 本身是否可以处理这样的正则表达式。也许sedawk 会起作用

标签: regex bash if-statement logic


【解决方案1】:

你可以使用 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"* ]]

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 2012-03-26
    • 1970-01-01
    • 2022-10-24
    • 2019-12-11
    • 2011-12-13
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多