当grep“\\”XXFile我得到“Trailing Backslash”

时间:2013-12-03 03:41:44

标签: linux bash shell grep

现在我想查找是否有包含'\'字符的行。我试过grep "\\" XXFile,但它提示“Trailing Backslash”。但是当我尝试grep '\\' XXFile时就可以了。谁能解释为什么第一个案例无法运行?感谢。

2 个答案:

答案 0 :(得分:98)

不同之处在于shell如何处理反斜杠:

  • 当您用双引号编写"\\"时,shell会解释反斜杠转义并最终将字符串\传递给grep。 Grep然后看到一个没有后续字符的反斜杠,因此它会发出“尾随反斜杠”警告。如果你想使用双引号,你需要应用两个转义级别,一个用于shell,一个用于grep。结果:"\\\\"

  • 当您在单引号中编写'\\'时,shell会执行任何解释,这意味着grep会收到两个反斜杠完整的字符串\\。 Grep将此解释为转义反斜杠,因此它会在文件中搜索文字反斜杠字符。

如果不清楚,我们可以使用echo来确切了解shell正在做什么。 echo本身不进行任何反斜杠解释,因此它打印的是shell传递给它的内容。

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

答案 1 :(得分:2)

您可以将命令编写为

grep "\\\\" ...

这有两对反斜杠,bash会转换为两个单反斜杠。然后,这对新的对将作为转义的反斜杠传递给grep,以获取所需的内容。