下面两个命令:
grep ', \\.' enrolments
grep ', \.' enrolments
Run Code Online (Sandbox Code Playgroud)
得到了如下所示的相同结果
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
Run Code Online (Sandbox Code Playgroud)
reg for . 中的双反斜杠和单斜杠有什么区别?
我怀疑您实际上在 shell 命令中使用了双引号而不是单引号。
在 shell 中,", \."
和", \\."
是完全相同的字符串。它们也与 相同', \.'
。但又', \\.'
不同。
在双引号字符串中,只能使用反斜杠转义少数字符。反斜杠的任何其他使用都被视为正常字符。由于.
不是字符之一(它们是$ ` \ "换行符),因此\in\.
不被认为是特殊的。另一方面,第一个\in\\
被视为转义字符,因此它会转义第二个\。不管怎样,你最终都会得到\ ..
在单引号字符串中,反斜杠字符永远不会被视为特殊字符。它始终被视为只是一个普通角色。
最后:
$ echo "\." "\\." '\.' '\\.'
\. \. \. \\.
Run Code Online (Sandbox Code Playgroud)
因此,如果您使用双引号,则这两个命令
grep ", \\." enrolments
grep ", \." enrolments
Run Code Online (Sandbox Code Playgroud)
实际上做了完全相同的事情,并且与 无关grep
。在这两种情况下,传递给 grep 的模式都是, \.
。grep
然后将反斜杠字符解释为.普通模式字符而不是通配符。
但是,grep ', \\.' enrolments
会将模式传递, \\.
给,这将被解释为搜索后跟任何字符的grep
序列。, SP \这不会与您提供的任何示例行匹配,因为它们都不包含文字反斜杠。