grep命令的奇怪行为

grep命令的奇怪行为,grep,Grep,当我进行以下grep时,我得到的结果无法向自己解释: host:/usr/local/tomcat > grep '-XX:PermSize=256m' * RELEASE-NOTES: http://www.apache.org/licenses/LICENSE-2.0 RUNNING.txt: http://www.apache.org/licenses/LICENSE-2.0 好了,我的正则表达式中没有一个字符有特殊的含义(在方括号内,-有一个,但没有)。我还把

当我进行以下grep时,我得到的结果无法向自己解释:

host:/usr/local/tomcat > grep '-XX:PermSize=256m' *
RELEASE-NOTES:      http://www.apache.org/licenses/LICENSE-2.0
RUNNING.txt:      http://www.apache.org/licenses/LICENSE-2.0
好了,我的正则表达式中没有一个字符有特殊的含义(在方括号内,
-
有一个,但没有)。我还把它放在单引号中,所以它不应该被shell修改

  • Grep版本:Grep(GNU-Grep)2.5.1
  • Tomcat版本:6.0.36(二进制) 发行版)

由于您的模式以减号
-
开头,
grep
将其解释为参数

你可以说:

grep -- '-XX:PermSize=256m' *
grep -- '[-]XX:PermSize=256m' *
--
将告诉
grep
停止处理命令行参数

或者,你可以说:

grep -- '-XX:PermSize=256m' *
grep -- '[-]XX:PermSize=256m' *


(当你说
[-]
时,连字符被解释为文字。因为你说
(在方括号内,-有一个..
,似乎应该澄清一下。)

我的
grep
抱怨

grep: invalid matcher X:PermSize=256m
但是您可以在这里看到,
grep
-X..
视为一个选项。要使其停止解释选项,请使用
--
,即

grep -- -XX:PermSize=256m *

不需要单引号。

shell将命令扩展为以下内容:

grep -XX:PermSize=256m LICENSE NOTICE RELEASE-NOTES RUNNING.txt bin conf lib …
Grep接受一个秘密参数
-Xoptarg
,但不报告一个无效选项

但是,下一个标记,
LICENSE
作为正则表达式。键入
grep-X*
将许可证标记作为参数
-X
的输入字符串,greps for NOTICE在RELEASE-NOTES和RUNNING.txt中

secret grep capital X参数的含义是设置内部模式,即

  • grep-xgrep
    → 行为正常(
    grep-G
  • grep-X egrep
    → 表现得像grep-E
  • grep-X awk
    → 使用
  • grep-X fgrep
    → 表现得像grep-F
  • grep-xperl
    → 表现得像grep-P
  • grep-X“无法识别的字符串”
    → 行为正常
+1,用于指向的链接。