如何为 c:\grep

noo*_*ler 4 shell grep cygwin quoting

我正在使用 cygwin 的 grep 来查找 c 驱动器上硬编码路径的所有实例。正在做:

grep -r "c:\\" .
Run Code Online (Sandbox Code Playgroud)

grep: trailing backslash

有谁知道我怎么能做到这一点?

ire*_*ses 11

您的错误是因为您使用了双引号 ( "),它允许 shell 在内容到达grep.

试试吧grep -r 'c:\\' .

echo 'c:\' > test
ire@localhost$ cat test
c:\
ire@localhost$ grep -r 'c:\\' test
c:\
Run Code Online (Sandbox Code Playgroud)

说明:\对 shell 和 grep 都有特殊的意义。它用作转义字符,以允许按字面解释下一个字符。

当您这样做时grep "c:\\",shell 会选取内容,将其转换为文字 string c:\,然后将其传递给grepgrep看到单个反斜杠,并将其解释为转义字符。但是没有字符跟随\逃脱!所以,它抱怨是很合理的。

使用单引号 ( ') 保护内容不受 shell 影响。但是您仍然需要两个斜杠,因为您需要说明grep这是您要搜索的字面反斜杠。

或者,您可以这样做:

grep -rF 'C:\' .
Run Code Online (Sandbox Code Playgroud)

或者

grep -rF "C:\\" .
Run Code Online (Sandbox Code Playgroud)

-Fgrep的选项(以前称为fgrep命令)告诉grep寻找固定字符串,因此没有什么可以转义的,反斜杠不是特殊的grep(但仍然是双引号内的外壳)。

  • 或者,执行 `grep -r "c:\\\\"` 这样 grep 将看到 `c:\\ ` 作为其输入字符串(单引号是更好的方法) (4认同)