linux - Grep(或替代)2个字符串,匹配一个,另一个或两者都成功,包含任何其他内容是失败的

标签 linux bash ksh

我想分析命令的输出。 我有 2 个潜在的字符串匹配项。 如果我匹配一个、另一个或两者,我将其归类为及格。 如果输出包含任何其他内容,我想将其标记为失败。

这是我的原始代码,大部分时间都有效。 但是当输出(在极少数情况下)包含我的两个字符串时,这是允许的。它标记为失败:

 if [ "$STATUS" != "Ok" ] && [ "$STATUS" != "Non-Critical" ]             
   then  
   echo "FAILED: STATUS NOT 'Ok' OR NOT 'Non-Critical'"
   else
   echo " Status check good."
 fi

当我的输出包含两个字符串时,上面的方法对我来说失败了,这不是我想要的。

所以,要清楚: 好的 - 它本身就是一个通行证。

非关键 - 就其本身而言是通过。

好的 非关键 - 是通过。

非关键 好的 - 是合格的。

其他都是失败

希望比我聪明的人能帮忙:-)

最佳答案

你可以为此使用 sed。

echo -e "Critical\nNon-Critical\nNon-Critical Ok" | 
  sed 's/.*\(Non-Critical\|Ok\).*/PASS/;t;s/.*/FAIL/'

说明:首先,我们用 PASS 替换“Non-Critical”或“Ok”以及该行中的所有其他内容;然后,命令 t 在匹配成功时跳转到脚本的末尾。但是,如果匹配不成功,所有内容都会被 FAIL 替换。上述命令的输出:

FAIL
PASS
PASS

关于linux - Grep(或替代)2个字符串,匹配一个,另一个或两者都成功,包含任何其他内容是失败的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57109532/

相关文章:

python - 如果 NFS 服务器已挂载并在线,请检查 python 脚本

c - 链表 : how to delete last node, 我们有指向单个链表中最后一个节点的指针

mysql - 抑制 ubuntu 中的 stdout 警告消息

linux - 在命令行中将参数传递给 ksh 脚本时转义反引号 - grave(`)

ksh - 检查文件是否存在于 ksh

php - 文本预处理的性能改进

linux - 元数据库返回被杀死

bash - 终端在启动时为 PATH 变量显示 'no such file or directory'

bash - 寻找 。 -执行 echo {}\; = `-exec' 缺少参数

unix - 将 KSH 中的空格替换为 SED