我想分析命令的输出。 我有 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/