Bash过滤器中的正则表达式

时间:2013-10-08 11:51:17

标签: regex bash

我有这个字符串

<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

有人可以帮我吗?

3 个答案:

答案 0 :(得分:2)

  1. 您无需引用=~
  2. 的rhs
  3. 您可以使用BASH_REMATCH变量来获取所需的值。
  4. 尝试:

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

    来自manual

      

    BASH_REMATCH

         

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

答案 1 :(得分:0)

您不需要正则表达式。只需使用bash的内置parameter expansions

$ x="<div style='text-align:center;padding-top:6px;'>Displaying Result 1 - 10 of 10 Matching Services</div>"
$ x="${x##*of }"
$ echo "${x%% *}"
10

答案 2 :(得分: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