Intereting Posts
Как выполнить команду, не сохраняя ее в истории (даже для клавиши «вверх») в zsh Используйте «mount -o» с пользователем без полномочий root Сохранение параметров `find` в переменной Как проверить правильность установки FFTW? Как уменьшить влияние изменения значения массива `fpath` на время запуска zsh? Начало работы с Hostapd с набором микросхем RTL8192CU на IPFire Измените исходный код драйвера и скомпилируйте Виртуальная консоль TTY + tmux: кажется, что ~ / .bashrc запускается более одного раза? Ubuntu и Windows 10 с двойной загрузкой Откройте файл и запишите во второй столбец определенное число Grep для нескольких строк, покажите количество строк после одной из строк (но не другой) Как скопировать все файлы, которые были созданы или изменены за последние 12 месяцев? Не-ASCII печатные символы в sshd-баннере Где я могу найти файл журнала, который регистрирует сообщения об ошибках портов во FreeBSD? SSH-туннель: «канал x: не будет отправлять данные после закрытия»

Как использовать регулярный оператор шаблона {m, n} в grep?

У меня есть текстовый файл, из которого мне нужно выбрать только те строки, которые включают строку «tt». Поэтому я попробовал это в командной строке:

grep "t{2}" textfile 

Несмотря на то, что я знаю, что текстовый файл содержит такие слова, как «гнилой» «мусор», команда grep не показывает строк, однако статус выхода равен 1.

Я попробовал очередной шаблон:

 grep "a.*x" textfile 

для этого он работает.

По умолчанию grep использует Basic Regular Expressions , вам нужно избежать скобок, чтобы grep соответствовал нескольким символам:

 grep 't\{2\}' textfile 

В качестве альтернативы вы можете использовать параметр -E (или параметр -P для GNU grep , который использует регулярные выражения Perl Compatible Regular Express ), что делает использование grep Extended Regular Expressions , которое может использовать фигурные скобки, не избегая их:

 grep -E 't{2}' 

Вам нужно избегать брекетов:

 grep 't\{2\}' textfile 

В противном случае { и } рассматриваются как буквенные символы.

Вам нужно использовать --extended-regexp -E ( --extended-regexp ) или -P ( --perl-regexp ) (с GNU grep).

Согласно справочной странице GNU grep (1) о Basic vs Extended Regular Expressions , то есть, если вы решите не использовать эти параметры:

В основных регулярных выражениях метасимволы?, +, {, |, (, И) теряют свое особое значение; вместо этого используйте backslashed версии \ ?, \ +, \ {, \ |, \ (, и \).