我可以帮助搞清楚正则表达式。给出文件中的单词列表:
Peril
Is
I
Non
No
我正在尝试找到一个匹配复数的正则表达式,如果有必要,但只有在没有其他匹配可用的情况下。我现在所拥有的:
#!/bin/bash
findword(){
grep -iE "^$@?" file
}
如果我像findword perils
一样运行它,则返回Peril
。这就是我想要发生的事情。
但是,如果我像findword non
那样运行它,它会匹配Non
和No
。
与findword is
相同,Is
和I
都匹配。那不是我想要发生的事情。如果在列表中找不到完全匹配,我只想要非完全匹配。
答案 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
选项,因为单词可以包含.
之类的元字符,但您希望按字面搜索