2013-10-08 2 views
1

У меня есть эта строкаРегулярное выражение в Bash фильтра

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

мне нужен номер "10" после того, как "из"

Мои Regex теперь

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

кто может мне помочь, пожалуйста, ?

ответ

2
  1. Вам не нужно указывать номер =~.
  2. Вы можете использовать переменную BASH_REMATCH, чтобы получить требуемое значение.

Try:

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

echo "${BASH_REMATCH[1]}" 

От manual:

BASH_REMATCH

переменной массива, члены которого назначаются бинарного оператора =~ условной команды [[ (см Условный Формирует). Элемент с индексом 0 - это часть строки, совпадающая с полным регулярным выражением . Элемент с индексом n является частью строки, соответствующей n-му подвыражению в скобках. Эта переменная доступна только для чтения.

0

Вам не нужны регулярные выражения. Просто используйте Баш встроенный 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 
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 
Смежные вопросы