bash - 检查具有可变编号的字符串的出现
问题描述
检查具有可变编号的字符串的出现我必须检查某个条件,该条件是,只要在某个 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错,(...)'的一部分。
解决方案
正则表达式是你的朋友。
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 wrong
or10 wrong
等。
同样,请参阅我的答案开头的链接,但是 -
[...]
是一个“字符类”,这意味着它匹配一个字符,就像括号之间的任何字符一样。它可以用额外的元字符来详细说明:
*
表示前面模式的“零个或多个”,因此[0-9]*
将匹配任意数量的连续数字。这意味着它将匹配123454321
或空字符串...因此,如果针对“ab”进行测试,它将在开头、结尾和字母之间匹配。
[0-9]*[1-9][0-9]*
表示“任何或没有数字”( [0-9]*
) 后跟任何非零数字 ( [1-9]
) 后跟“任何或没有数字” ( [0-9]*
)。这允许前导零,结束零,但不是只有零。如果没有至少一个非零数字,则失败。
推荐阅读
- python - Pandas 只识别我的数据框中的一列
- amazon-web-services - 从 cloudformation 创建 Aurora Serverless 集群?
- informix - TO 在一行中显示记录
- event-sourcing - 来自 AxonDB 事件存储的事件未到达我的 TrackingEventProcessor
- ios - 如何在 UIBezierPath 超过阈值时更改笔触和路径颜色
- java - 如何在 Eclipse 中导入 Jenetics 库
- javascript - 抛出断言错误
- twilio - 无法在 Twilio Softphone 上静音音频输出
- smpp - 如何在 kannel 上设置registred_delivery
- python - 声明式查询中的 Python Pony ORM 单行属性