我相信这是件小事,但我对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然而,这是行不通的,它将进入虚假。当我用一个在线工具测试正则表达式时,它看起来很好,我不知道这里有什么问题。
发布于 2021-08-31 22:22:54
您可以将regex模式放在变量中,并在if语句中使用该变量,如下所示:
digit="Err: 8"
pattern="Err: [1-9]"
if [[ $digit =~ $pattern ]];
then
echo "$digit is a digit"
else
echo "oops"
fi或者,如果不想使用额外的变量,可以像这样更改if语句:
digit="Err: 8"
if [[ $digit =~ Err:\ [1-9] ]];
then
echo "$digit is a digit"
else
echo "oops"
fi发布于 2021-08-31 22:23:03
您可以使用[[:blank:]]来匹配空格和制表符,而不需要周围的引号:
if [[ $digit =~ Err:[[:blank:]][1-9] ]]; 或者你可以逃离这个空间:
if [[ $digit =~ Err:\ [1-9] ]];或者将带有引号的模式放在变量中:
pattern='Err: [1-9]'
if [[ $digit =~ $pattern ]];由于第一个示例字符串似乎有多个空格,所以可以重复字符类:
digit="summary = 689 in 2s = 350.3/s Avg: 4 Min: 0 Max: 84 Err: 24 (3.48%)"
pattern='Err: [1-9]'
if [[ $digit =~ Err:[[:blank:]]+[1-9] ]];
then
echo "$digit is a digit"
else
echo "oops"
fi输出
summary = 689 in 2s = 350.3/s Avg: 4 Min: 0 Max: 84 Err: 24 (3.48%) is a digithttps://stackoverflow.com/questions/69005738
复制相似问题