仅当未找到完全匹配时,正则表达式才匹配复数

时间:2017-07-29 12:37:48

标签: regex bash grep

我可以帮助搞清楚正则表达式。给出文件中的单词列表:

Peril
Is
I
Non
No

我正在尝试找到一个匹配复数的正则表达式,如果有必要,但只有在没有其他匹配可用的情况下。我现在所拥有的:

#!/bin/bash
findword(){
  grep -iE "^$@?" file
}

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

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

1 个答案:

答案 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选项,因为单词可以包含.之类的元字符,但您希望按字面搜索
相关问题