当我做以下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
Afaik,我的正则表达式中没有一个字符具有特殊含义(在方括号内,-
有一个,但没有)。我也把它放在单引号中,所以shell不应该修改它。
答案 0 :(得分:4)
由于您的模式以减号-
开头,grep
会将其解释为参数。
你可以说:
grep -- '-XX:PermSize=256m' *
--
会告诉grep
停止处理命令行参数。
或者,您可以说:
grep -- '[-]XX:PermSize=256m' *
(当你说[-]
连字符被解释为文字。因为你说(inside square brackets, - has one..
,似乎应该澄清它。)
答案 1 :(得分:3)
shell将命令扩展为以下内容:
grep -XX:PermSize=256m LICENSE NOTICE RELEASE-NOTES RUNNING.txt bin conf lib …
Grep接受秘密参数-Xoptarg
而不报告无效选项。 In the source code它读取
/* -X is undocumented on purpose. */
但是,下一个标记LICENSE
被视为正则表达式。键入grep -X *
将LICENSE标记作为参数-X
的输入字符串,并在RELEASE-NOTES和RUNNING.txt中输入 NOTICE 。
秘密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'
→正常行事答案 2 :(得分:2)
我的grep
抱怨
grep: invalid matcher X:PermSize=256m
但您在此处可以看到grep
认为-X...
是一个选项。要使其停止解释选项,请使用--
,即
grep -- -XX:PermSize=256m *
单引号不是必需的。