以下两个命令:
grep ', \\.' enrolments
grep ', \.' enrolments
得到的结果如下所示
COMP4001|4368523|Doddau Yobhazravi, . |8684 |M
COMP9315|4368523|Doddau Yobhazravi, . |8684 |M
COMP9321|4368523|Doddau Yobhazravi, . |8684 |M
COMP9331|4368523|Doddau Yobhazravi, . |8684 |M
COMP3121|4896558|Vozaila, . |3978/3|F
COMP9321|4896558|Vozaila, . |3978/3|F
COMP9031|4389601|Yiehil, . |8680/2|M
COMP9318|4389601|Yiehil, . |8680/2|M
reg中的双反斜杠和单斜杠有什么区别。?
答案 0 :(得分:4)
我怀疑你在shell命令中实际使用的是双引号而不是单引号。
在shell中,", \."
和", \\."
完全相同的字符串。它们也与', \.'
相同。但是', \\.'
是不同的。
在双引号字符串中,只能使用反斜杠转义几个字符。反斜杠的任何其他用法都被视为普通字符。由于.
不是其中一个字符(它们是 $ ` \ " 和换行符(),\.
中的 \ 不被认为是特殊的。另一方面,\\
中的第一个 \ 被视为转义字符,因此它会转义第二个 \ 。无论哪种方式,你最终得到 \ 。。
在单引号字符串中,反斜杠字符从不视为特殊字符。它总是被视为一个普通的角色。
因此:
$ echo "\." "\\." '\.' '\\.'
\. \. \. \\.
因此,如果您使用双引号,那么这两个命令
grep ", \\." enrolments
grep ", \." enrolments
实际上做同样的事情,这与grep
无关。在这两种情况下,传递给grep的模式都是, \.
。 grep
然后将反斜杠字符解释为使。成为普通模式字符而不是通配符。
但是,grep ', \\.' enrolments
会将模式, \\.
传递给grep
,这将被解释为搜索序列, SP \ 后跟任何字符。这不会与您提供的任何样本行匹配,因为它们都不包含文字反斜杠。