【发布时间】:2021-08-21 23:57:04
【问题描述】:
在我的终端提示符下, echo 'Banana' | grep -oe 'n' 按预期工作:
$ echo 'Banana' | grep -oe 'n'
n
n
但不是 echo 'Banana' | grep -eo 'n':
$ echo 'Banana' | grep -eo 'n'
grep: n: No such file or directory
为什么 -e &-o的顺序很重要?
【问题讨论】:
-
-eo的意思是“查找正则表达式o。下面的n被解释为文件名。非posix 标志可能在它们' 被捆绑。重要的原因是,紧跟在-e之后的下一件事将被解释为正则表达式。让它以任何其他方式运行将是毁灭性的。 -
-e后面必须紧跟搜索模式,所以如果你想把o放在e之后,你需要grep -e 'n' -o -
现在我知道你是对的:
-e表示接下来是模式;因此-e必须排在最后;这允许以-开头的模式。 $ echo '香蕉' | grep -e -o 'n' grep: n: 没有这样的文件或目录 $ echo 'Banana' | grep -o -e 'n' n n 手册页指的是这个。例如,$ echo '高端' | grep -e -e high-end 但不是 100% 正确:手册页上说-e和-f可以组合使用。考虑: $ echo 'dog-food' | grep -e -f ood grep: ood: 没有这样的文件或目录但是: $ touch a.txt $ echo 'high-end' | grep -e -e a.txt $ echo '高端' | grep -e -e -f a.txt 高端