2016-07-28 114 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\後跟任意字符。這將不會與您提供的任何示例行匹配,因爲它們都不包含文字反斜槓。