首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式错误的bash脚本:[1-9]

正则表达式错误的bash脚本:[1-9]
EN

Stack Overflow用户
提问于 2021-08-31 21:59:47
回答 2查看 106关注 0票数 0

我相信这是件小事,但我对bash和正则表达式还比较陌生,

给定一个字符串summary = 689 in 2s = 350.3/s Avg: 4 Min: 0 Max: 84 Err: 24 (3.48%),我想检查文本Err: [1-9]是否发生在bash脚本中给定的字符串中。为了实现这一点,我编写了以下脚本

代码语言:javascript
复制
digit="Err: 8"

if [[ $digit =~ 'Err: [1-9]' ]]; 
then
    echo "$digit is a digit"
else
    echo "oops"
fi

然而,这是行不通的,它将进入虚假。当我用一个在线工具测试正则表达式时,它看起来很好,我不知道这里有什么问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-31 22:22:54

您可以将regex模式放在变量中,并在if语句中使用该变量,如下所示:

代码语言:javascript
复制
digit="Err: 8"
pattern="Err: [1-9]"
if [[ $digit =~ $pattern ]]; 
then
    echo "$digit is a digit"
else
    echo "oops"
fi

或者,如果不想使用额外的变量,可以像这样更改if语句:

代码语言:javascript
复制
digit="Err: 8"
if [[ $digit =~ Err:\ [1-9] ]]; 
then
    echo "$digit is a digit"
else
    echo "oops"
fi
票数 1
EN

Stack Overflow用户

发布于 2021-08-31 22:23:03

您可以使用[[:blank:]]来匹配空格和制表符,而不需要周围的引号:

代码语言:javascript
复制
if [[ $digit =~ Err:[[:blank:]][1-9] ]]; 

或者你可以逃离这个空间:

代码语言:javascript
复制
if [[ $digit =~ Err:\ [1-9] ]];

或者将带有引号的模式放在变量中:

代码语言:javascript
复制
pattern='Err: [1-9]'
if [[ $digit =~ $pattern ]];

由于第一个示例字符串似乎有多个空格,所以可以重复字符类:

代码语言:javascript
复制
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

输出

代码语言:javascript
复制
summary =    689 in     2s =  350.3/s Avg:     4 Min:     0 Max:    84 Err:    24 (3.48%) is a digit
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69005738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档