【问题标题】:When grep "\\" XXFile I got "Trailing Backslash"当 grep "\\" XXFile 我得到“尾随反斜杠”
【发布时间】:2013-12-18 23:56:14
【问题描述】:

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

【问题讨论】:

  • 您能否接受将问题标记为已解决的答案?
  • 两个答案都不回答问题。 OP(和我自己)想要搜索包含 '\' (单个反斜杠)的行。 grep '\' ...grep "\\" ... 的结果都是 grep: Trailing backslash

标签: linux bash shell grep


【解决方案1】:

你可以把命令写成

grep "\\\\" ...

这有两对反斜杠,bash 会将它们转换为两个单反斜杠。然后,这对新的一对将作为转义的反斜杠传递给 grep,让您得到想要的结果。

【讨论】:

  • 我会打电话给grep '\\' 更容易理解。
【解决方案2】:

区别在于shell如何处理反斜杠:

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

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

如果不清楚,我们可以使用echo 来查看 shell 到底在做什么。 echo 本身不做任何反斜杠解释,所以它打印的是 shell 传递给它的内容。

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

【讨论】:

    猜你喜欢
    • 2020-05-20
    • 2020-03-14
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    相关资源
    最近更新 更多