我正在使用 cygwin 的 grep 来查找 c 驱动器上硬编码路径的所有实例。正在做:
grep -r "c:\\" .
给出grep: trailing backslash
有人知道我该怎么做吗?
答案1
您的错误是因为您使用了双引号 ( "
),它允许 shell 在到达 之前解释内容grep
。
尝试grep -r 'c:\\' .
一下。
echo 'c:\' > test
ire@localhost$ cat test
c:\
ire@localhost$ grep -r 'c:\\' test
c:\
解释:\
对于 shell 和 grep 都有特殊的含义。它用作转义字符,以允许按字面解释下一个字符。
当您执行此操作时grep "c:\\"
,shell 会获取内容,将其转换为文字字符串c:\
,并将其传递给grep
。grep
看到单个反斜杠,并将其解释为转义字符。但没有任何角色跟随\
逃跑!所以,它抱怨是很合理的。
使用单引号 ( '
) 可以保护内容免受 shell 的影响。但您仍然需要两个斜杠,因为您需要告诉grep
这是您要搜索的字面反斜杠。
或者,你也可以这样做:
grep -rF 'C:\' .
或者
grep -rF "C:\\" .
grep 的选项-F
(以前称为fgrep
命令)告诉grep
我们要查找固定字符串,因此没有什么可以转义的,并且反斜杠并不是特殊的grep
(但仍然适用于双引号内的 shell)。
答案2
或者直接使用"c:/"
(也可以在 Windows 下使用)。