[英]What's special about a “space” character in an “expr match” regexp?
在bash shell中,我设置如下行:
line="total active bytes: 256"
现在,我只想从该行获取数字,所以我这样做:
echo $(expr match "$line" '.*\([[:digit:]]*\)' )
我什么都没得到 但是,如果我在regexp中的第一个反斜杠之前添加一个空格字符,那么它可以工作:
echo $(expr match "$line" '.* \([[:digit:]]*\)' )
为什么?
这个空间并不特别。 发生的事情是,在第一种情况下, .*
匹配整个字符串(即,它匹配“贪婪”),包括数字,并且因为你用*
(而不是\\+
)量化了数字,那部分正则表达式允许匹配0个字符。
通过在数字匹配之前放置一个空格,第一部分只能匹配但不包括字符串中的最后一个空格,使数字与\\([[:digit:]]*\\)
匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.