2015-03-11 2 views
1

У меня есть много данных в каталоге, я хочу найти любые примеры двойных слов, которые не являются числами. Я начал с этим из here:Grep regex, чтобы найти повторяющиеся слова, исключая список ключевых слов

\b(\w+) \1\b 

И расширил его, чтобы включить то, что я не хочу в результатах:

(?!(?:one|two|three|four|five|six|seven|eight|nine|oh|zero))\b(\w+) \1\b 

Это работает, когда я положил его в regex101 как выражение питона (с это все, что я знаю), но не тогда, когда я использую его в команде grep. Я понял, что я не могу использовать, так что я попробовал это после прочтения this question:

grep -Proh "\b(\w+) \1\b" | grep -Prohv "?(?:one|two|three|four|five|six|seven|eight|nine|oh|zero)" 

Который возвращает «Grep: ничего, чтобы повторить». Я не уверен, использую ли я правильные параметры grep, или что не так с регулярным выражением, которое я использую.

Образец данных для соответствия:
сегодня для оценки возможностей. сомневаюсь, что это происходит

Примеры игнорируемых данных:
удельный вес, одна точка ноль ноль семь

+0

использование с -Р '\ б ((?: восемь | е (?!? Ив | наш) | девять | о (: ч | п) | s (?: Даже | ий) | t (?: hree | wo) | zero)) (\ w +) \ 1 \ b' – sln

ответ

2

Просто -P или -oP будет достаточно.

$ grep -P '(?!(?:one|two|three|four|five|six|seven|eight|nine|oh|zero))\b(\w+) \1\b' file 
today to evaluate for possibilities. doubt that that is occurring 
$ grep -oP '(?!(?:one|two|three|four|five|six|seven|eight|nine|oh|zero))\b(\w+) \1\b' file 
that that 
+0

Это работает! Мне нужны другие параметры, чтобы поддерживать управление данными, но добавление их ничего не сломает. То, что заканчивается тем, что ломается, оказывается одиночным или двойным кавычками, сравнивая мое с вашим. Какая разница? – zakparks31191

+0

Также спасибо за быстрый и лаконичный ответ! – zakparks31191

+0

Я думаю, что проблема связана главным образом с дополнительными параметрами 'hv'. –

Смежные вопросы