Как я могу указать регулярное выражение в команде zgrep / zcat? - PullRequest
1 голос
/ 16 октября 2019

Я хочу найти в списке слов каждое слово, содержащее как минимум 3 раза одну и ту же букву. Чтобы добиться этого, я сделал .*(\w).*\1.*\1.*\1.*, и вы можете проверить его здесь http://www.regexplanet.com/advanced/java/index.html, но я не знаю, как поместить его в мою команду zgrep.

Как вставить это регулярное выражение вzgrep команда?

1 Ответ

1 голос
/ 16 октября 2019

Пара примечаний:

  • Вам не нужно сопоставлять начало и конец строки с .*, поскольку разрешены частичные совпадения
  • \w соответствует буквам,цифры и подчеркивания в шаблонах регулярных выражений NFA, в POSIX безопаснее использовать [[:alnum:]_]
  • . Для формирования группы захвата в шаблоне POSIX BRE используйте экранированные скобки, \(...\).

Таким образом, используйте

zgrep '\([[:alnum:]_]\).*\1.*\1.*\1' a.gz

Или сожмите его немного, поскольку он выглядит немного избыточным с тремя последовательными .*\1 подшаблонами:

zgrep '\([[:alnum:]_]\)\(.*\1\)\{3\}' a.gz
...