Почему мое условие повторения с диапазоном grep не работает?

Искал решение для SO, Ask и Unix / Linux, но я проиграл, пытаясь понять, как написать условное выражение с диапазоном grep:

Пройти:

1-20_something
100-200_something
2-100_something
11-333_something

работает, но только на 1-9_something:

if grep -q '[0-9]-[0-9]_something' "$foobar"; then
    echo "Additional Code"
fi

не работает:

if grep -q '\d{1,3}-\d{1,3}_something' "$foobar"; then
    echo "Additional Code"
fi

, и это не работает:

if grep -q '[0-9]{1,3}-[0-9]{1,3}_something' "$foobar"; then
    echo "Additional Code"
fi

Каков наилучший путь для диапазона через {1,3}?

EDIT:

Чтобы помочь следующему человеку, который может пройти через это, я много искал и после ответы, которые я дал:

Grep для диапазона чисел Как сопоставить определенный диапазон чисел с регулярным выражением, используя только grep Соответствие последовательности чисел в grep
1
задан 23 May 2017 в 15:39

1 ответ

Ваша вторая попытка должна работать, если вы включили PCRE (совместимые с Perl регулярные выражения) с помощью -P:

grep -Pq '\d{1,3}-\d{1,3}_something'

\d не находится в BRE или ERE или в списке дополнительной обратной косой черты выражения, которые GNU Grep имеет, но это вещь Perl.

Ваша третья попытка должна работать, если вы активировали дополнительные выражения обратной косой черты :

grep -Eq '[0-9]{1,3}-[0-9]{1,3}_something'

[ f5] не является конструкцией BRE (основное регулярное выражение).

2
ответ дан 23 May 2018 в 18:00

Другие вопросы по тегам:

Похожие вопросы: