Это действительно - два вопроса и должно было быть разделено. Но так как ответы относительно просты, я помещу их здесь. Эти ответы для GNU grep
конкретно.
a) egrep
совпадает с grep -E
. Оба указывают, что "Расширенные регулярные выражения" должны использоваться вместо grep
Регулярные выражения по умолчанию. grep
требует обратных косых черт для простых Регулярных выражений.
От man
страница:
Основной по сравнению с расширенными регулярными выражениями
В основных регулярных выражениях метасимволы?, +, {|, (и) теряют их особое значение; вместо этого используйте backslashed версии \?, \+, \{, \|, \(, и \).
Посмотрите man
страница для дополнительных деталей об исторических конвенциях и мобильности.
b) Использовать egrep '(.)\1{N}'
и замена N
с количеством символов Вы хотите заменить минус один (так как точка соответствует первому). Таким образом, если Вы хотите соответствовать символу, повторенному четыре раза, использовать egrep '(.)\1{3}'
.
Это искало бы 2 или больше происшествия того же символа:
grep -E '(.)\1+' file
Если бы Ваш awk имеет-o опцию, это распечатало бы его каждое соответствие на новой строке..
grep -Eo '(.)\1+' file
Найти соответствия точно с 3 соответствиями:
grep -E '(.)\1{2}' file
Или 3 или больше:
grep -E '(.)\1{2,}' file
и т.д.
править
На самом деле @stephane_chazelas прав относительно обратных ссылок и-E. Я забыл об этом. Я попробовал его в BSD grep и GNU grep, и это работает там, но это не находится в некоторых других властях. Необходимо было бы использовать один из ниже версии..
Регулярные grep версии:
grep '\(.\)\1\{1,\}' file
grep -o '\(.\)\1\{1,\}' file
grep '\(.\)\1\{2\}' file
grep '\(.\)\1\{2,\}' file
-o
опция является также не стандартным grep BTW (вероятно, если Ваш grep понимает,-o это может также сделать обратную ссылку)..
Примечание: grep -E '(.)\1{2,}'
файл и grep '\(.\)\1\{2\}'
файл является неправильным как alexis обозначенный и должен быть проигнорирован..
-E
опция grep
не сделал бы многого? Это объяснило бы довольно много, например, почему я потратил впустую так много времени, ища, где я был неправ!
– erch
03.04.2013, 00:02
+
оператор.. Я отправлю примеры также.
– Scrutinizer
03.04.2013, 08:56
grep -E '(.)\1{2}'
точно "Не находит соответствия точно с 3 соответствиями". В то время как это будет соответствовать точно трем идентичным символам, они могут быть встроены в более длинную повторную строку; например, это будет соответствовать в строке с 5 символами AAAAA
. (И если будет 6 или больше последовательных символов, то это будет соответствовать несколько раз).
– alexis
11.05.2016, 16:48
Во-первых, спасибо всем за Ваши комментарии поддержки и предложения. Как оказалось, я был уже вполне близко к ответу.
Основной вопрос был о:
Есть ли простой способ искать n происшествия того же символа, например.
aa
,tttttt
Короткий ответ:
Следующее [изменения] команды повторится 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
обратная косая черта деактивируется, метасимволы [использует Расширенные регулярные выражения]Поскольку это - короткий ответ, я хочу предоставить тем, кто столкнулся с сопоставимыми проблемами, я добавил свою основную сводку того, о чем по-видимому нужно знать, работая с grep
и egrep
.
Основные регулярные выражения
Используемый в 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
добавляет следующие опции
Две ссылки направят тот к постоянному-клиенту-expressions.info, который, в дополнение к потрясающей поддержке я здесь, действительно помог мне много.
egrep
если мне нужны регулярные выражения (в противоположность просто простой строке, соответствующей) так, чтобы я не волновался о запоминании различий междуgrep
два типа регулярных выражений. – depquid 03.04.2013, 00:19grep '\(.\)\1\{3\}'
является стандартным,grep -E '(.)\1{3}'
не. – Stéphane Chazelas 03.04.2013, 00:32