2017-07-29 90 views
0

我可以使用一些帮助来计算正则表达式。鉴于单词列表中的文件:正则表达式只有在找不到完全匹配的情况下才能匹配复数

Peril 
Is 
I 
Non 
No 

我试图找到一个正则表达式,如果有必要,将匹配一个复数,但只有当没有其他可用的比赛。我最近在看什么:

#!/bin/bash 
findword(){ 
    grep -iE "^[email protected]?" file 
} 

如果我运行它像findword perils返回Peril。这就是我想要发生的事情。

但是,如果我运行它像findword non它匹配NonNo。 与findword is相同匹配IsI。这不是我想要发生的事情。如果在列表中找不到完全匹配,我只想要非精确匹配。

+0

我可能是错的,但我认为,你解决不了这只与正则表达式。你需要它的方式,正则表达式将不得不搜索一切,以知道一个完全匹配不存在,只有然后搜索一个非完全匹配。这将需要至少两个循环,一个搜索确切的和另一个非确切的,如果第一个找不到任何。 –

+0

我认为正则表达式可以解决所有问题;) –

+0

但我仍然需要弄清楚第二个循环的正确的正则表达式。 –

回答

2
$ cat file 
Peril 
Is 
I 
Non 
No 

$ findword(){ grep -ix "$1" file || grep -ix "${1::-1}" file; } 
$ findword no 
No 
$ findword non 
Non 
$ findword none 
Non 
$ findword i 
I 
$ findword is 
Is 
  • -x给力的整条生产线仅符合
  • grep -ix "$1" file如果有发现匹配,就会被打印和退出状态将是0
  • 否则,||后命令倒还玩
  • grep -ix "${1::-1}" file再次检查最后一个字符删除
    • 也可以使用grep -ixE "$1?" file
  • 此外,可以添加-F选项柜面词可以包含像.元字符,但你要搜索的字面
+0

'grep -x'PATTERN''与'grep'相同^ PATTERN $'' – Anubis