日期:2014-05-16  浏览次数:20663 次

shell中的特殊字符与单引号的疑惑
tmp.log中存在“[2/1]”“[2/0]”这样的特殊字符
我采用语句:
grep '\[2\/[0-1]\]' tmp.log

显示结果是正确的
但使用以下语句就不能显示了
grep '\[2\/*\]' tmp.log

这是什么原因?

另外:单引号中的特殊字符全部视为普通字符,为何在grep语句中还需要添加反斜杠呢
单引号中字符串特殊符号在什么情况下不需要加反斜杠。
shell菜鸟,希望大家可以帮帮,如果我找到答案也会发生来的。
谢谢。

------解决方案--------------------
是这个吧:
grep '\[2\/.*\]' tmp.log

*是shell的通配符,
.*才是正则表达式
------解决方案--------------------
引用
grep '\[2\/*\]' urfile

在正则表达式里面*号表示它左边的字符出现0次或任意多次
'\[2\/*\]'的意思是左方括号后面跟着数字2,数字2后面跟着0个或任意多个斜线,再后面跟着右方括号。
很显然你的数据不符合这个条件,因为你右方括号前面还有其它数字。

引用
单引号中的特殊字符全部视为普通字符,为何在grep语句中还需要添加反斜杠呢

因为方括号在grep里面有特殊意义,它表示一个集合,所以需要转义。

引用
单引号中字符串特殊符号在什么情况下不需要加反斜杠。

具体命令具体分析,没有一个放之四海而皆准的规律。
------解决方案--------------------
grep是正则,不是通配符。