Grep正则表达式解读一个词

时间:2014-06-16 13:02:45

标签: regex grep

我想使用grep命令解密一个单词。

我正在使用下面的代码。我知道还有其他方法可以做到,但我想我在这里遗漏了一些东西:

 grep "^[yxusonlia]\{9\}$" /usr/share/dict/words

应该产生一个输出:

anxiously

但它会产生:

annulosan                      
innoxious

还有更多。基本上我找不到我应该如何指定那些字符 只能匹配一次,所以我只得到一个输出。

如果看起来非常简单,我道歉但我尝试了很多但找不到任何东西。

2 个答案:

答案 0 :(得分:5)

您可以将grep -PPCRE正则表达式)与否定前瞻

一起使用
grep -P '^(?:([yxusonlia])(?!.*?\1)){9}$' /usr/share/dict/words
anxiously 

<强>解释

grep正则表达式对组#1匹配的每个字符使用否定前瞻(?!.*?\1),即\1。每个字符仅与匹配,并且仅在字符串中不再使用相同的字符时才结束。

答案 1 :(得分:3)

您可以使用前瞻来确保每个字母只匹配一次。它很冗长,需要一个支持前瞻的grep版本(例如通过-P)。以编程方式构建搜索字符串可能更好。

grep -P "^(?=.*y)(?=.*x)(?=.*u)(?=.*s)(?=.*o)(?=.*n)(?=.*l)(?=.*i)(?=.*a)[yxusonlia]{9}$" /usr/share/dict/words