2016-07-28 141 views
3

两个命令:reg中的双反斜杠和单斜杠之间有什么区别?下面

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

你还没有在他的问题中展示双反斜杠。 –

+0

请查看[editing-help](http://stackoverflow.com/editing-help)。 – Cyrus

+1

你能否确认你使用了'grep',\'''注册而不是'grep',\。“'注册?我只能用双引号重现。 – rici

回答

4

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

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

在双引号字符串中,只有几个字符可以使用反斜线进行转义。反斜杠的任何其​​他用途都被认为是正常字符。由于.是不是其中一个角色(他们是$`\和换行符),该\在\.不考虑特殊的。在另一方面,第一\\\被视为转义字符,所以它避开了第二\。无论哪种方式,你最终\

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

结果:

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

所以,如果你使用双引号,这两个命令

grep ", \\." enrolments 

grep ", \." enrolments 

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

然而,grep ', \\.' enrolments会通过图案, \\.grep,这将被解释为搜索的序列SP\后跟任意字符。这将不会与您提供的任何示例行匹配,因为它们都不包含文字反斜杠。