sh/bash/dash/ksh/zsh等Shell脚本
-
fz420
- 帖子: 127
- 注册时间: 2007-06-18 5:23
- 来自: http://china.com
#1
帖子
由 fz420 » 2012-03-01 19:17
请问下大家为什么 grep 里的 斜杠 可以用来转义???
redhat的文档是说“单引号”可以防止所有扩展,我的理解是:对于单引号来说,相当于可以转义单引号范围内的所有特殊字符才对吧??
-
fz420
- 帖子: 127
- 注册时间: 2007-06-18 5:23
- 来自: http://china.com
#2
帖子
由 fz420 » 2012-03-01 20:54
找到答案了,给兄弟们补上
这个和grep本省没有关系,而是和shell有关系,
比如:
grep "\\" file 这个为什么会失败呢?
因为用双引号,shell先把\\转义,就成了\,grep接收到的只有\,\是特殊字符,后面应该跟需要转义的字符,所以只有一个\就出错了。
如果用双引号,查找一个\,就应该用四个\:
grep "\\\\" file 这样就对了,这样等同于:
grep '\\' file
第一条命令shell把四个\,转义成2个\传递给grep,grep再把2个\转义成一个\查找
第二条命令shell没转义,直接把2个\传递给grep,grep再把2个\转义成一个\查找
其实grep执行的是相同的命令。
-
zcf115
- 帖子: 398
- 注册时间: 2009-06-28 10:06
- 系统: ubuntu12.04
#3
帖子
由 zcf115 » 2012-03-02 0:25
grep '\\' file 。这个省事。
Still Alive
-
枫叶饭团
- 帖子: 14683
- 注册时间: 2010-06-16 1:05
- 系统: Mac OS X
- 来自: Tencent
-
联系:
#4
帖子
由 枫叶饭团 » 2012-03-02 0:29
还好python有r

-
tosail2010
- 帖子: 83
- 注册时间: 2011-03-27 19:01
-
联系:
#5
帖子
由 tosail2010 » 2012-03-02 8:29
fz420 写了:找到答案了,给兄弟们补上
这个和grep本省没有关系,而是和shell有关系,
比如:
grep "\\" file 这个为什么会失败呢?
因为用双引号,shell先把\\转义,就成了\,grep接收到的只有\,\是特殊字符,后面应该跟需要转义的字符,所以只有一个\就出错了。
如果用双引号,查找一个\,就应该用四个\:
grep "\\\\" file 这样就对了,这样等同于:
grep '\\' file
第一条命令shell把四个\,转义成2个\传递给grep,grep再把2个\转义成一个\查找
第二条命令shell没转义,直接把2个\传递给grep,grep再把2个\转义成一个\查找
其实grep执行的是相同的命令。
2个命令的共同点:
grep再把2个\转义成一个\查找
不同点:单引号和双引号在使用上的区别;单引号中字符串就是一串普通字符串,而双引号则不是,有特殊字符的说法,其中\ (backslash) 就是一个。
A year's plan starts with spring.
-
自由建客
- 帖子: 13468
- 注册时间: 2008-07-30 23:21
- 系统: Debian stable AMD64
#6
帖子
由 自由建客 » 2012-03-02 8:40
剥洋葱一样,关键是要明白是谁在剥,剥到最后那个要剥的人还有没有得剥。
-
fz420
- 帖子: 127
- 注册时间: 2007-06-18 5:23
- 来自: http://china.com
#7
帖子
由 fz420 » 2012-03-02 20:48
自由建客 写了:剥洋葱一样,关键是要明白是谁在剥,剥到最后那个要剥的人还有没有得剥。
很有道理啊!我最开始没有搞明白的,就是不理解有“剥”这个动作,以为只是简单的原样传递……