У меня есть вопрос о максимальном количестве повторений регулярных выражений: {n} и {n, m}.
$ man grep
...
Repetition
A regular expression may be followed by one of several repetition operators:
...
{n} The preceding item is matched exactly n times.
{n,} The preceding item is matched n or more times.
{,m} The preceding item is matched at most m times. This is a GNU extension.
{n,m} The preceding item is matched at least n times, but not more than m times.
...
Теперь рассмотрим тестовый файл:
$ cat ./sample.txt
1
12
123
1234
Затем grepэто для [0-9] (цифр), которое повторяется ровно 2 раза:
$ grep "[0-9]\{2\}" ./sample.txt
12
123
1234
?Почему это включает 123 и 1234?
Кроме того, я grep один и тот же текстовый файл для цифр, повторяющихся не менее 2 раз, но не более 3 раз:
$ grep "[0-9]\{2,3\}" ./sample.txt
12
123
1234
???Почему это возвращает «1234»?
Очевидный обходной путь - использовать grep и reverse-grep для фильтрации чрезмерных результатов.Например,
$ grep "[0-9]\{2,\}" ./sample.txt | grep -v "[0-9]\{4,\}"
12
123
Может кто-нибудь помочь мне понять, почему {n} возвращает строку, содержащую шаблон, повторяющийся более n раз?И почему {n, m} возвращает шаблон, повторяющийся более m раз ??