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:\,然后将其传递给grep。grep看到单个反斜杠,并将其解释为转义字符。但是没有字符跟随\逃脱!所以,它抱怨是很合理的。
使用单引号 ( ') 保护内容不受 shell 影响。但是您仍然需要两个斜杠,因为您需要说明grep这是您要搜索的字面反斜杠。
或者,您可以这样做:
grep -rF 'C:\' .
Run Code Online (Sandbox Code Playgroud)
或者
grep -rF "C:\\" .
Run Code Online (Sandbox Code Playgroud)
-Fgrep的选项(以前称为fgrep命令)告诉grep寻找固定字符串,因此没有什么可以转义的,反斜杠不是特殊的grep(但仍然是双引号内的外壳)。