Разыскиваемый решение на Так, Спросите и 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}
?
Для помощи следующему человеку, который может натыкаться на это, я сделал большой поиск и после ответов, учитывая, я смог закончиться:
Фигурные скобки {
}
рассматривают как литералы в BRE (Основное Регулярное выражение). От man grep
:
Basic vs Extended Regular Expressions
In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their
special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \).
, Таким образом, Вы нуждаетесь или
grep '[0-9]\{1,3\}-[0-9]\{1,3\}_something'
или включаете режим Extended Regular Expression с -E
переключатель
grep -E '[0-9]{1,3}-[0-9]{1,3}_something'
Ваша вторая попытка должна работать при включении PCRE (Совместимые с Perl регулярные выражения) использование -P
:
grep -Pq '\d{1,3}-\d{1,3}_something'
\d
не находится в BRE или ДО или в списке дополнительные выражения обратной косой черты , что GNU, который Grep имеет, но это - вещь Perl.
Ваша третья попытка должна работать, если бы Вы включили ДО (расширенные регулярные выражения) :
grep -Eq '[0-9]{1,3}-[0-9]{1,3}_something'
<exp>{m,n}
не BRE (основное регулярное выражение) конструкция.