首页 > 解决方案 > 检查具有可变编号的字符串的出现

问题描述

检查具有可变编号的字符串的出现我必须检查某个条件,该条件是,只要在某个 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错,(...)'的一部分。

标签: bashif-statement

解决方案


正则表达式是你的朋友。

if curl http://websiteABC.com | grep -qE '[0-9]*[1-9][0-9]* wrong'
then  echo "TestNotSuccesfull"
else echo "TestSuccesfull"
fi 

if可以接受一个复杂的命令作为它的参数,并且任何非零返回的结果都是假的。

grep如果您使用 ,则可以采用扩展正则表达式-E,并-q告诉它不要将匹配的行发送到标准输出,而只需返回 n 退出代码以指示是否找到它们。[0-9]+表示一个或多个数字。

我编辑了图案。这个不会错误地报告失败,0 wrong但会点击01 wrongor10 wrong等​​。

同样,请参阅我的答案开头的链接,但是 - [...]是一个“字符类”,这意味着它匹配一个字符,就像括号之间的任何字符一样。它可以用额外的元字符来详细说明:

*表示前面模式的“零个或多个”,因此[0-9]*将匹配任意数量的连续数字。这意味着它将匹配123454321或空字符串...因此,如果针对“ab”进行测试,它将在开头、结尾和字母之间匹配。

[0-9]*[1-9][0-9]*表示“任何或没有数字”( [0-9]*) 后跟任何非零数字 ( [1-9]) 后跟“任何或没有数字” ( [0-9]*)。这允许前导零,结束零,但不是只有零。如果没有至少一个非零数字,则失败。


推荐阅读