reg中的双反斜杠和单斜杠之间有什么区别?

时间:2016-07-28 03:39:50

标签: bash shell unix

以下两个命令:

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中的双反斜杠和单斜杠有什么区别。?

1 个答案:

答案 0 :(得分:4)

我怀疑你在shell命令中实际使用的是双引号而不是单引号。

在shell中,", \."", \\." 完全相同的字符串。它们也与', \.'相同。但是', \\.'是不同的。

在双引号字符串中,只能使用反斜杠转义几个字符。反斜杠的任何其​​他用法都被视为普通字符。由于.不是其中一个字符(它们是 $ ` \ " 和换行符(),\.中的 \ 不被认为是特殊的。另一方面,\\中的第一个 \ 被视为转义字符,因此它会转义第二个 \ 。无论哪种方式,你最终得到 \

在单引号字符串中,反斜杠字符从不视为特殊字符。它总是被视为一个普通的角色。

因此:

$ echo "\." "\\." '\.' '\\.'
\. \. \. \\.

因此,如果您使用双引号,那么这两个命令

grep ", \\." enrolments

grep ", \." enrolments

实际上做同样的事情,这与grep无关。在这两种情况下,传递给grep的模式都是, \.grep然后将反斜杠字符解释为使成为普通模式字符而不是通配符。

但是,grep ', \\.' enrolments会将模式, \\.传递给grep,这将被解释为搜索序列 SP \ 后跟任何字符。这不会与您提供的任何样本行匹配,因为它们都不包含文字反斜杠。