![正则表达式:所有希腊字母有 5 个唯一字母(意味着每个字母只出现一次)](https://linux22.com/image/17234/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%EF%BC%9A%E6%89%80%E6%9C%89%E5%B8%8C%E8%85%8A%E5%AD%97%E6%AF%8D%E6%9C%89%205%20%E4%B8%AA%E5%94%AF%E4%B8%80%E5%AD%97%E6%AF%8D%EF%BC%88%E6%84%8F%E5%91%B3%E7%9D%80%E6%AF%8F%E4%B8%AA%E5%AD%97%E6%AF%8D%E5%8F%AA%E5%87%BA%E7%8E%B0%E4%B8%80%E6%AC%A1%EF%BC%89.png)
另一个我似乎无法解决的问题:所有希腊字母都有 5 个唯一的字母(意味着每个字母只出现一次)。
我的解决方案:
egrep '(.)([^/1])([^/1/2])([^/1/2/3])([^/1/2/3/4])' greek.txt
所以我想我想说的是:
匹配任何第一个字符
每个连续字符不能是前面的任何模式
但结果是:
alpha
gamma
delta
epsilon
theta
kappa
lambda
omicron
sigma
upsilon
omega
Alpha、Gamma,它们的特征并不独特。关于我做错了什么有任何提示或提示吗?
答案1
- 使用一个 grep 过滤所有长度为 != 5 的行。
- 使用第二个 grep 过滤所有重复字符的单词。
egrep '^.{5}$' greek.txt | egrep -v '^.*(.).*\1.*$'
感谢@StephaneChazelas 在评论中指出优化:
grep -x '.\{5\}' | grep -v '\(.\).*\1'
答案2
我认为你走在正确的轨道上,但你的斜杠走向了错误的方向,成为反向引用。使用\1
不/1
!