检查具有可变数字的字符串的出现 我必须检查某个条件,该条件是,只要某个URL中的某处有一行指出“ [X]错误”的行,然后返回“ TestNotSuccesfull”。这里的X可以是'1','2'等。
我不知道如何发表可以检查的语句,然后再检查“ 1错误”或“ 2错误”或“ 3错误”,等等。必须有更好的解决方案。同样是因为理论上“ X错误”中的X可以导致成千上万...
我在bash中创建的命令行下检查“ 1错误”是否发生。
export result=`curl http://websiteABC.com | grep '1 wrong' | wc -l`; if [ $result -ge 1 ]; then echo "TestNotSuccesfull"; else echo "TestSuccesfull"; fi
有人可以帮我吗?
PS,实际上必须检查的字符串是'(...)对,X错误,(...)'的一部分。
答案 0 :(得分:2)
Regexes是你的朋友。
if curl http://websiteABC.com | grep -qE '[0-9]*[1-9][0-9]* wrong'
then echo "TestNotSuccesfull"
else echo "TestSuccesfull"
fi
if
可以接受一个复杂的命令作为参数,并且任何非零返回的结果都为false。
grep
, -E
可以采用扩展正则表达式,并且-q
告诉它不要将匹配的行发送到stdout,而只是返回n个退出代码以表明它们是否为找到了。 [0-9]+
表示一个或多个数字。
我编辑了图案。这个不会误报0 wrong
失败,而是会命中01 wrong
或10 wrong
等。
[...]
是一个“字符类”,这意味着它与一个括号中的任何一个字符匹配。可以使用其他元字符进行详细说明:
*
表示前一个模式的“零个或多个”,因此[0-9]*
将匹配 any 个连续数字。这意味着它将匹配123454321
或一个空字符串...因此,如果针对“ ab”进行测试,则它将在开头,结尾和字母之间匹配。
[0-9]*[1-9][0-9]*
的意思是“任何数字或没有数字”([0-9]*
),然后是任何非零数字([1-9]
),然后是“任何数字或没有数字”([0-9]*
)。这允许前导零,结束零,但不允许仅零。如果至少没有一个非零数字,它将失败。