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

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

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

这是什么原因?

另外:单引号中的特殊字符全部视为普通字符,为何在grep语句中还需要添加反斜杠呢
单引号中字符串特殊符号在什么情况下不需要加反斜杠。
shell菜鸟,希望大家可以帮帮,如果我找到答案也会发生来的。
谢谢。
...全文
124 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
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的通配符, .*才是正则表达式

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧