Regex 正则表达式仅在未找到完全匹配的情况下匹配复数
我需要一点帮助来弄清楚正则表达式。给定文件中的单词列表:Regex 正则表达式仅在未找到完全匹配的情况下匹配复数,regex,bash,grep,Regex,Bash,Grep,我需要一点帮助来弄清楚正则表达式。给定文件中的单词列表: Peril Is I Non No 我试图找到一个正则表达式,如果需要,它将匹配复数,但只有在没有其他匹配可用时。我现在所拥有的: #!/bin/bash findword(){ grep -iE "^$@?" file } 如果我像findword-periors那样运行它,它将返回perior。这就是我想要发生的 但是如果我像findwordnon那样运行它,它会同时匹配non和No。 与findword is相同匹配is和I
Peril
Is
I
Non
No
我试图找到一个正则表达式,如果需要,它将匹配复数,但只有在没有其他匹配可用时。我现在所拥有的:
#!/bin/bash
findword(){
grep -iE "^$@?" file
}
如果我像findword-periors
那样运行它,它将返回perior
。这就是我想要发生的
但是如果我像findwordnon
那样运行它,它会同时匹配non
和No
。
与findword is相同
匹配is
和I
。这不是我想要的。如果在列表中找不到精确匹配,我只需要非精确匹配
$ 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”文件
0
- 否则,
之后的命令将开始播放|
删除最后一个字符后再次检查grep-ix“${1::-1}”文件
- 也可以使用
grep-ixE“$1?”文件
- 也可以使用
- 此外,可以添加
选项,因为单词可以包含-F
之类的元字符,但您希望按字面搜索
仅强制整行匹配-x
如果找到匹配项,将打印该文件,退出状态将为grep-ix“$1”文件
0
- 否则,
之后的命令将开始播放|
删除最后一个字符后再次检查grep-ix“${1::-1}”文件
- 也可以使用
grep-ixE“$1?”文件
- 也可以使用
- 此外,可以添加
选项,因为单词可以包含-F
之类的元字符,但您希望按字面搜索
perior
对于periors
很好,但是I
对于is
不好?我可能会感到困惑,但是如果你的意思是你想要危险
如果找到了,并且危险
只有危险
没有找到,那么你可以做一些类似grep-ix“$1”文件| grep-ixE“$1?”文件的事情
我可能错了,但我认为你不能只用regex解决这个问题。按照您需要的方式,正则表达式必须搜索所有内容才能知道不存在精确匹配,然后才搜索非精确匹配。这至少需要两个循环,一个搜索精确的,另一个搜索非精确的,如果第一个找不到的话但是我仍然需要为第二个循环找出正确的正则表达式。但是您如何区分perior
对于periors
很好,但是I
对于is
不好?我可能会感到困惑,但是如果你的意思是你想要危险
如果找到了,并且危险
只有危险
没有找到,那么你可以做类似grep-ix“$1”文件| grep-ixE“$1”的事情文件
grep-x'PATTERN'
与grep'^PATTERN$'相同
grep-x'PATTERN'
与grep'^PATTERN$'相同