shell中的特殊字符与单引号的疑惑

素衣白马客京华 fnst 服务器端工程师  2013-05-31 05:02:50
tmp.log中存在“[2/1]”“[2/0]”这样的特殊字符
我采用语句:
grep '\[2\/[0-1]\]' tmp.log

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

这是什么原因?

另外:单引号中的特殊字符全部视为普通字符,为何在grep语句中还需要添加反斜杠呢
单引号中字符串特殊符号在什么情况下不需要加反斜杠。
shell菜鸟,希望大家可以帮帮,如果我找到答案也会发生来的。
谢谢。
...全文
75 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
qq120848369 2013-06-01
grep是正则,不是通配符。
回复
谢谢楼上几位,grep是正则表达式,应该用正则表达式,我理解错了
回复
linux-c 2013-05-31
引用 2 楼 ljc007 的回复:
引用
grep '\[2\/*\]' urfile
在正则表达式里面*号表示它左边的字符出现0次或任意多次 '\[2\/*\]'的意思是左方括号后面跟着数字2,数字2后面跟着0个或任意多个斜线,再后面跟着右方括号。 很显然你的数据不符合这个条件,因为你右方括号前面还有其它数字。
引用
单引号中的特殊字符全部视为普通字符,为何在grep语句中还需要添加反斜杠呢
因为方括号在grep里面有特殊意义,它表示一个集合,所以需要转义。
引用
单引号中字符串特殊符号在什么情况下不需要加反斜杠。
具体命令具体分析,没有一个放之四海而皆准的规律。
+1
回复
ljc007 2013-05-31
引用
grep '\[2\/*\]' urfile
在正则表达式里面*号表示它左边的字符出现0次或任意多次 '\[2\/*\]'的意思是左方括号后面跟着数字2,数字2后面跟着0个或任意多个斜线,再后面跟着右方括号。 很显然你的数据不符合这个条件,因为你右方括号前面还有其它数字。
引用
单引号中的特殊字符全部视为普通字符,为何在grep语句中还需要添加反斜杠呢
因为方括号在grep里面有特殊意义,它表示一个集合,所以需要转义。
引用
单引号中字符串特殊符号在什么情况下不需要加反斜杠。
具体命令具体分析,没有一个放之四海而皆准的规律。
回复
pix77 2013-05-31
是这个吧: grep '\[2\/.*\]' tmp.log *是shell的通配符, .*才是正则表达式
回复
相关推荐
发帖
系统维护与使用区
创建于2007-08-27

1.9w+

社区成员

系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
申请成为版主
帖子事件
创建了帖子
2013-05-31 05:02
社区公告
暂无公告