1

我有这个字符串

<div style='text-align:center;padding-top:6px;'>Displaying Result 1 - 10 of 10 Matching Services</div>

我需要“of”后面的数字“10”

我的正则表达式现在是

if [[ "$WARNING" =~ "of.([0-9]*)" ]]
then
        echo "OK: $WARNING"
else
    echo "NOK: $WARNING"
fi

谁能帮帮我?

4

3 回答 3

2
  1. 您不需要引用 rhs 的 rhs =~
  2. 您可以使用该BASH_REMATCH变量来获得所需的值。

尝试:

if [[ "$WARNING" =~ of.([0-9]*) ]]
then
    echo "OK: $WARNING"
else
    echo "NOK: $WARNING"
fi

echo "${BASH_REMATCH[1]}"

手册

BASH_REMATCH

一个数组变量,其成员由=~二元运算符分配给[[条件命令(请参阅条件构造)。索引为 0 的元素是字符串中匹配整个正则表达式的部分。索引为 n 的元素是字符串中匹配第 n 个带括号的子表达式的部分。此变量是只读的。

于 2013-10-08T11:58:42.227 回答
0

你不需要正则表达式。只需使用 bash 的内置参数扩展

$ x="<div style='text-align:center;padding-top:6px;'>Displaying Result 1 - 10 of 10 Matching Services</div>"
$ x="${x##*of }"
$ echo "${x%% *}"
10
于 2013-10-08T12:53:42.270 回答
0

这是另一个有趣的awk示例,您可以对其进行修改以提供WARNING

[[bash_prompt$]]$ cat log
<div style='text-align:center;padding-top:6px;'>Displaying Result 1 - 10 of 10 Matching Services</div>
[[bash_prompt$]]$ awk '/of [0-9]*/{l=gensub(/^.*of ([0-9]*).*$/,"\\1",1); if(l > 10) print "greater"; else print "smaller"}' log
smaller
于 2013-10-08T13:10:23.767 回答