我想用grep命令解读一个单词.
我正在使用下面的代码.我知道还有其他方法可以做到,但我想我在这里遗漏了一些东西:
grep "^[yxusonlia]\{9\}$" /usr/share/dict/words
Run Code Online (Sandbox Code Playgroud)
应该产生一个输出:
anxiously
Run Code Online (Sandbox Code Playgroud)
但它产生:
annulosan
innoxious
Run Code Online (Sandbox Code Playgroud)
还有很多.基本上我找不到如何指定字符只能匹配一次,所以我只得到一个输出.
我道歉,如果看起来很简单,但我尝试了很多,找不到任何东西.
你可以使用grep -P(PCRE正则表达式)负向前瞻
grep -P '^(?:([yxusonlia])(?!.*?\1)){9}$' /usr/share/dict/words
anxiously
Run Code Online (Sandbox Code Playgroud)
说明:
对于由组#1匹配的每个字符,此grep正则表达式使用负前瞻.每个字符仅匹配,并且只有在字符串中没有再次跟随相同字符直到结束时才匹配.(?!.*?\1)\1