现在我想查找是否有包含'\'字符的行。我试过grep "\\" XXFile
,但它提示“Trailing Backslash”。但是当我尝试grep '\\' XXFile
时就可以了。谁能解释为什么第一个案例无法运行?感谢。
答案 0 :(得分:98)
不同之处在于shell如何处理反斜杠:
当您用双引号编写"\\"
时,shell会解释反斜杠转义并最终将字符串\
传递给grep。 Grep然后看到一个没有后续字符的反斜杠,因此它会发出“尾随反斜杠”警告。如果你想使用双引号,你需要应用两个转义级别,一个用于shell,一个用于grep。结果:"\\\\"
。
当您在单引号中编写'\\'
时,shell会不执行任何解释,这意味着grep会收到两个反斜杠完整的字符串\\
。 Grep将此解释为转义反斜杠,因此它会在文件中搜索文字反斜杠字符。
如果不清楚,我们可以使用echo
来确切了解shell正在做什么。 echo
本身不进行任何反斜杠解释,因此它打印的是shell传递给它的内容。
$ echo "\\"
\
$ echo '\\'
\\
答案 1 :(得分:2)
您可以将命令编写为
grep "\\\\" ...
这有两对反斜杠,bash会转换为两个单反斜杠。然后,这对新的对将作为转义的反斜杠传递给grep,以获取所需的内容。