Вы можете использовать альтернативы и количество повторов, чтобы определить шаблон поиска для чисел больше 45.
Это решение предполагает, что числа являются целыми числами без десятичной точки.
grep 'IO resumed after \(4[6-9]\|[5-9][0-9]\|[0-9]\{3,\}\) seconds'
или короче с egrep
:
egrep 'IO resumed after (4[6-9]|[5-9][0-9]|[0-9]{3,}) seconds'
Я тестировал шаблон с
for i in 1 10 30 44 45 46 47 48 49 50 51 60 99 100 1234567
do
echo "foo IO resumed after $i seconds bar"
done | grep 'IO resumed after \(4[6-9]\|[5-9][0-9]\|[0-9]\{3,\}\) seconds'
, который печатает
foo IO resumed after 46 seconds bar
foo IO resumed after 47 seconds bar
foo IO resumed after 48 seconds bar
foo IO resumed after 49 seconds bar
foo IO resumed after 50 seconds bar
foo IO resumed after 51 seconds bar
foo IO resumed after 60 seconds bar
foo IO resumed after 99 seconds bar
foo IO resumed after 100 seconds bar
foo IO resumed after 1234567 seconds bar
Если числа (can) имеют десятичную точку, трудно определить шаблон для чисел > 45, например, 45.1
. Этот шаблон допускает использование десятичной точки или запятой, за которыми следуют цифры, и реализует условие > = 46.
grep 'IO resumed after \(4[6-9]\|[5-9][0-9]\|[0-9]\{3,\}\)\([.,][0-9]*\)\{,1\} seconds'
2-е изменение:
Шаблоны выше не обрабатывают возможные ведущие нули. Как было предложено пользователем kvantour в комментарии, шаблон может быть расширен, чтобы справиться с этим. Кроме того, если не требуется проверять часть seconds
, шаблон для десятичных знаков можно не указывать.
Шаблон для чисел> = 45 с необязательными ведущими нулями:
grep 'IO resumed after 0*\(4[5-9]\|[5-9][0-9]\|[1-9][0-9]\{2,\}\)'