grep命令的奇怪行为
当我进行以下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 好了,我的正则表达式中没有一个字符有特殊的含义(在方括号内,-有一个,但没有)。我还把
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-Egrep-X egrep
→ 使用grep-X awk
→ 表现得像grep-Fgrep-X fgrep
→ 表现得像grep-Pgrep-xperl
→ 行为正常grep-X“无法识别的字符串”