2

When I do the following grep I get results I cannot explain to myself:

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

Afaik, none of the characters in my regular expression have a special meaning (inside square brackets, - has one, but there are none). I also put it into single quotes so it shouldn’t be modified by the shell.

  • Grep version: grep (GNU grep) 2.5.1
  • Tomcat version: 6.0.36 (binary distro)
4

3 回答 3

4

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

你可以说:

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

--会告诉grep停止处理命令行参数。

或者,您可以说:

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

(当您说[-]连字符被解释为文字时。既然您说(inside square brackets, - has one..,似乎应该澄清一下。)

于 2013-10-29T07:24:33.283 回答
3

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

grep -XX:PermSize=256m LICENSE NOTICE RELEASE-NOTES RUNNING.txt bin conf lib …

Grep 接受秘密参数-Xoptarg而不报告无效选项。在它读取的源代码中

  /* -X is undocumented on purpose. */

但是,下一个标记LICENSE被视为正则表达式。键入grep -X *将 LICENSE 令牌作为参数的输入字符串,并在 RELEASE-NOTES 和 RUNNING.txt 中-XNOTICE进行 greps。

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

  • grep -X grep→ 行为正常 ( grep -G)
  • grep -X egrep→ 表现得像grep -E
  • grep -X awk→ 用途RE_SYNTAX_AWK
  • grep -X fgrep→ 表现得像grep -F
  • grep -X perl→ 表现得像grep -P
  • grep -X 'unrecognized string'→ 表现正常
于 2013-10-29T08:28:17.727 回答
2

我的grep抱怨

grep: invalid matcher X:PermSize=256m

但是您可以在这里看到的是grep一种-X...选择。要使其停止解释选项,请使用--,即

grep -- -XX:PermSize=256m *

单引号不是必需的。

于 2013-10-29T07:26:53.360 回答