Linux Grep(或可选)对于2个字符串,匹配一个、另一个或两者都是成功的,包含任何其他内容都是失败的
我想分析命令的输出。 我有两个可能的字符串匹配。 如果我匹配其中一个、另一个或两者,我将其归类为及格。 如果输出包含任何其他内容,我希望将其标记为失败 这是我的原始代码,大部分时间都有效。 但是当输出(在罕见的情况下)同时包含我的两个字符串时,这是允许的。它标记为失败:Linux Grep(或可选)对于2个字符串,匹配一个、另一个或两者都是成功的,包含任何其他内容都是失败的,linux,bash,ksh,Linux,Bash,Ksh,我想分析命令的输出。 我有两个可能的字符串匹配。 如果我匹配其中一个、另一个或两者,我将其归类为及格。 如果输出包含任何其他内容,我希望将其标记为失败 这是我的原始代码,大部分时间都有效。 但是当输出(在罕见的情况下)同时包含我的两个字符串时,这是允许的。它标记为失败: if [ "$STATUS" != "Ok" ] && [ "$STATUS" != "Non-Critical" ] then echo "FAILED: STATU
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;然后,成功匹配后,命令t
跳到脚本末尾。然而,如果比赛不成功,一切都会被失败所取代。上述命令的输出:
FAIL
PASS
PASS
一个案子怎么样
case "$STATUS" in
*Non-Critical*) echo PASS;;
*Ok*) echo PASS;;
*) echo FAIL;;
esac
我错过了什么吗?这是一个perl版本
echo -e "Critical\nNon-Critical\nNon-Critical Ok" | perl -ne 'print((/Non-Critical|Ok/?PASS:FAIL)."\n")'
FAIL
PASS
PASS
对于三值运算符a?b:c
look(仅适用于ksh)
或者,如果您不希望它与大小写无关(在bash和ksh中都适用)
您是否在
“状态”中忘记了$
“非关键”
?如果我匹配一个
这是一个精确匹配,还是要搜索任何子字符串是否匹配?如果在的“状态”中放入$
,我想代码应该可以正常工作“非关键”
正如@JanuarySorry所指出的,这是一个输入错误,我确实有美元。如果它允许,我会更正它。@Mihir:不是真的,因为状态可能是“非关键Ok”,然后条件失败。
#!/bin/ksh
if [[ $STATUS = @(~(+i:*OK*)) || $STATUS = @(~(+i:*Non-Critical*)) ]]; then
echo "good"
else
echo "bad"
fi
if [[ $STATUS = @(*OK*) || $STATUS = @(*Non-Critical*) ]]; then ............