Grep正则表达式在排除关键字列表时查找重复单词

时间:2015-03-11 15:14:45

标签: regex bash grep

我在目录中有很多数据,我想找到任何不是数字的双字实例。我从here开始:

\b(\w+) \1\b

并将其扩展为包含我在结果中不需要的内容:

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

当我将它作为python表达式放入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参数,或者我正在使用的正则表达式有什么问题。

要匹配的示例数据:
 今天要评估可能性。怀疑那是否正在发生

要忽略的示例数据:
 比重一点零零七

1 个答案:

答案 0 :(得分: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