$ grep a{2,} alphabet.txt
grep: a: No such file or directory
$cat alphabet.txt
abcdefghijklnmopqrstuvwxyz
Мой алфавит.txt содержит строку с буквой z.
Разве {2,} не означает совпадение aaa *? Однако grep
даже не работает.
Выйдите из своего шаблона Regex для предотвращения интерпретации оболочки заранее.
Вы использовали шаблон a{2,}
, без любого выхода, поскольку это - допустимое bash
шаблон расширения фигурной скобки это расширяется bash
как a2 a
.
Таким образом, в конечном счете, что grep
добирается:
grep a2 a alphabet.txt
Как файл a
не существует следовательно ошибка относительно него.
Просто выйдите из шаблона с помощью любого из обычных способов:
grep 'a{2,}' alphabet.txt
grep "a{2,}" alphabet.txt
grep a\{2,\} alphabet.txt
Здесь, использование одинарных кавычек рекомендуется, если у Вас нет переменной, Вы хотите расшириться - в этом случае используют двойные кавычки. Старайтесь избегать обратной косой черты, выходящей, как тот мог бы искаженный шаблоны и делать их нечитабельными, например, при выходе ДО (Расширенное регулярное выражение) маркеры в BRE (Основное Регулярное выражение); где Вам будет нужен к (blackslash) Escape дважды, чтобы заставить механизм рассматривать их как ДО маркеры.
Даже сейчас фигурные скобки рассматривали бы буквально потому что grep
использованием по умолчанию механизм BRE, в то время как диапазон, соответствующий {}
на самом деле ДО маркер. Таким образом, можно использовать -E
опция рассматривать шаблон как ДО:
grep -E 'a{2,}' alphabet.txt
Или выйдите из фигурных скобок в BRE:
grep 'a\{2,\}' alphabet.txt
Как примечание стороны, Ваш входной файл не содержит два или больше последовательных a
следовательно шаблон a{2,}
никогда не будет соответствовать текущему входу.