Я ищу регулярное выражение, которое находит все вхождения двойных символов в тексте, листинге и т. Д. В командной строке (Bash).
Главная Вопрос : Есть ли простой способ поиска последовательностей , таких как aa
, ll
, ttttt
и т.д. , где один определяет регулярное выражение , которое выглядит для п вхождений одного и того же символа с? То, что я ищу, - это достижение этого на очень базовом уровне. В командной строке. В оболочке Linux.
После некоторых исследований я пришел к следующим ответам - и вопросам, вытекающим из них, поэтому они просто дали мне подсказку, где может быть решение. Но:
a) (e) grep и проблема обратной косой черты
grep 'a\{2\}'
ищетaa
egrep'a{2}'
ищетaa
Вопрос: действительно ли необходимость установки люфтов связана с командой, которую я использую? Если да, может ли кто-нибудь дать мне подсказку, что еще следует учитывать при использовании (e) grep здесь?
б) Я нашел этот ответ здесь для моего вопроса, хотя это не совсем то, что я искал:
grep -E '(.)\1' filename
ищет записи с одним и тем же символом, появляющиеся более одного раза, но не спрашивает, как часто . Это близко к тому, что я ищу, но я все еще хочу установить количество повторений.
Я, вероятно, должен разделить это на два или более вопроса, но тогда я не хочу затоплять этот удивительный сайт здесь.
PS: Еще один вопрос, возможно , не по теме , но: это in
, inside
, at
или on the shell
. И on the command line
правильно ли?
egrep
если мне нужны регулярные выражения (в отличие от простого сопоставления строк), чтобы мне не пришлось беспокоиться о запоминании различий междуgrep
двумя типы регулярных выражений.grep '\(.\)\1\{3\}'
стандартно,grep -E '(.)\1{3}'
нет.Это будет искать 2 или более вхождения одного и того же персонажа:
Если в вашем awk есть опция -o, она будет печатать каждый матч в новой строке.
Чтобы найти совпадения точно с 3 совпадениями:
Или 3 или больше:
и т.д..
редактировать
На самом деле @stephane_chazelas прав насчет обратных ссылок и -E. Я забыл про это. Я пробовал это в BSD grep и GNU grep, и это работает там, но это не в некоторых других greps. Вам нужно будет использовать одну из следующих версий ..
Обычные версии grep:
-o
Вариант также не стандартный Grep BTW (вероятно , если ваш Grep понимает -o он может также сделать ссылку обратно) ..Примечание :
grep -E '(.)\1{2,}'
файл иgrep '\(.\)\1\{2\}'
файл неверны, как указано alexis, и их следует игнорировать.источник
-E
выбораgrep
ничего не поделаешь? Это могло бы многое объяснить, например, почему я потратил столько времени на поиски ошибки.+
оператора. Я также приведу примеры.grep -E '(.)\1{2}'
не совсем "Найти совпадения с ровно 3 совпадениями". Несмотря на то , что будет соответствовать ровно три одинаковых символов, они могут быть встроены в более неоднократного строку; например, он будет совпадать в 5-символьной строкеAAAAA
. (И если есть 6 или более последовательных символов, он будет совпадать более одного раза).Во-первых, спасибо всем за ваши комментарии и предложения. Оказывается, я уже был довольно близок к ответу.
Главный вопрос был о:
Краткий ответ :
Следующие [варианты] команд будут повторяться
a
как минимум один раз и бесконечноgrep 'a\{1,}
grep -E \(a\)\{1,\}
egrep a{1,}
или с доступными регулярными выражениями GNU
grep a\+
Количество повторений задается в фигурных скобках через шаблон
{min,max}
→{n}
повторение ровноn
раз,{n,}
повторение как минимумn
раз и{n,m}
повторение как минимум,n
но не чащеm
.Таким образом, как следствие, возникла вторичная проблема :
Короткий ответ : Да, использование обратной косой черты зависит от того , одного использования
grep
илиegrep
grep
: обратная косая черта активирует метасимволы [использует основные регулярные выражения]egrep
обратный слэш де -activates метасимволы [использует расширенные регулярные выражения]Поскольку это краткий ответ, я хочу предоставить тем, кто сталкивался с сопоставимыми проблемами, я добавил свое основное резюме того, о чем, по-видимому, нужно знать, работая с
grep
иegrep
.Регулярные выражения Basic, Extended и GNU
Основные регулярные выражения
Используется в
grep
,ed
иsed
командаОсновные функции набора регулярных выражений:
? [ . \ )
и т. Д. Активируются через обратную косую черту. Если обратной косой черты нет, они будут восприняты как (часть) поискового запроса.^ $ \<
и\>
поддерживаются без обратной косой черты\b
,\s
и т. Д.]Основные регулярные выражения GNU добавляют к этим
\?
Повторите символ ноль или один раз (c\?
соответствуетc
иcc
) и является альтернативой для\{0,1\}
\+
повторить символ хотя бы один раз (c\+
совпаденияcc
иcccccccc
т. д.) и является альтернативой\{1,\}
\|
поддерживается (например,grep a\|b
будет искатьa
илиb
grep -E
позволяет команде использовать весь набор расширенных регулярных выражений:Расширенные регулярные выражения [ERE]
Используется в
egrep
,awk
иemacs
является основной набор плюс довольно некоторые особенности.GNU Extendend Регулярные выражения
добавляет следующие функции
Две ссылки будут направлять одну на регулярные-экспресс-сайты.инфо, которые, в дополнение к потрясающей поддержке, которую я получил, действительно очень мне помогли.
источник