当前位置: 技术问答>linux和unix
shell中的特殊字符与单引号的疑惑
来源: 互联网 发布时间:2017-04-13
本文导语: tmp.log中存在“[2/1]”“[2/0]”这样的特殊字符 我采用语句: grep '[2/[0-1]]' tmp.log 显示结果是正确的 但使用以下语句就不能显示了 grep '[2/*]' tmp.log 这是什么原因? 另外:单引号中的特殊字符全部视为普通字符,为...
tmp.log中存在“[2/1]”“[2/0]”这样的特殊字符
我采用语句:
显示结果是正确的
但使用以下语句就不能显示了
这是什么原因?
另外:单引号中的特殊字符全部视为普通字符,为何在grep语句中还需要添加反斜杠呢
单引号中字符串特殊符号在什么情况下不需要加反斜杠。
shell菜鸟,希望大家可以帮帮,如果我找到答案也会发生来的。
谢谢。
我采用语句:
grep '[2/[0-1]]' tmp.log
显示结果是正确的
但使用以下语句就不能显示了
grep '[2/*]' tmp.log
这是什么原因?
另外:单引号中的特殊字符全部视为普通字符,为何在grep语句中还需要添加反斜杠呢
单引号中字符串特殊符号在什么情况下不需要加反斜杠。
shell菜鸟,希望大家可以帮帮,如果我找到答案也会发生来的。
谢谢。
|
是这个吧:
grep '[2/.*]' tmp.log
*是shell的通配符,
.*才是正则表达式
grep '[2/.*]' tmp.log
*是shell的通配符,
.*才是正则表达式
|
在正则表达式里面*号表示它左边的字符出现0次或任意多次
'[2/*]'的意思是左方括号后面跟着数字2,数字2后面跟着0个或任意多个斜线,再后面跟着右方括号。
很显然你的数据不符合这个条件,因为你右方括号前面还有其它数字。
因为方括号在grep里面有特殊意义,它表示一个集合,所以需要转义。
具体命令具体分析,没有一个放之四海而皆准的规律。
|
grep是正则,不是通配符。