【发布时间】:2021-08-31 21:59:47
【问题描述】:
我确定这是一件小事,但我对 bash 和正则表达式还比较陌生,
给定一个字符串 summary = 689 in 2s = 350.3/s Avg: 4 Min: 0 Max: 84 Err: 24 (3.48%) 我想检查文本 Err: [1-9] 是否出现在 bash 脚本的给定字符串中。为了实现这一点,我编写了以下脚本
digit="Err: 8"
if [[ $digit =~ 'Err: [1-9]' ]];
then
echo "$digit is a digit"
else
echo "oops"
fi
然而这不起作用,它会进入假的。当我使用在线工具测试正则表达式时,它似乎工作正常,我不确定这里有什么问题。
【问题讨论】:
-
将您的正则表达式模式放入一个变量中,然后在 if statament 中使用该变量。
-
[1-9]部分用引号引起来,因此它被视为文字字符串而不是模式。您可以使用 use'Err: '[1-9]或Err:\ [1-9]或将模式放入 Alireza 所说的变量中(然后在使用时不要在变量周围加上引号)。请参阅:How do I use regular expressions in bash scripts? BTW,您在这里并不需要完整的正则表达式,您可以使用 glob(又名通配符)模式:if [[ "$digit" = *'Err: '[1-9]* ]]