我想做一个 grep \resources\
。我该怎么做呢?
我试过了:
grep \resources\
grep \\resources\\
grep "\resources\"
grep "\\resources\\"
答案1
对于许多应用程序来说,反斜杠是一个特殊字符:
包括外壳:您需要使用另一个反斜杠或更优雅地使用来转义它单身的尽可能引用:
$ printf '%s\n' foo\\bar 'foo\bar' foo\bar foo\bar
在这里,该命令收到两个带有 value 的参数
foo\bar
,它们按原样在终端上回显。(上面,我使用的
printf
而不是echo
许多echo
实现也对反斜杠进行了自己的解释(这里将扩展\b
为退格字符))。但反斜杠也是 的特殊字符
grep
。该命令可识别许多特殊序列,如\(
、\|
、\.
等。因此,类似地,您需要为 grep 提供一个 double\\
作为实际的反斜杠字符。这意味着使用 shell 您需要输入:grep 'foo\\bar'
或等价:
grep foo\\\\bar
(这两行都告诉 shell
foo\\bar
作为参数传输grep
)。许多其他命令在某些参数中解释反斜杠……并且需要两级转义(一级转义 shell 解释,一级转义命令解释)。
顺便说一句,对于 shell,单引号'…'
会阻止任何类型的字符解释,但双引号只会阻止其中的某些字符:特别是$
,`
和\
在 中保持活动字符"…"
。
答案2
您也可以使用fgrep
(仅grep
与-F
标志一起使用)。这迫使 grep 将模式解释为固定字符串(即它将 a 视为\
文字\
)。您仍然需要保护反斜杠不被 shell 扩展。
grep -F '\resources\'
答案3
grep
需要四反斜杠代表反斜杠:
grep "\\\\resources\\\\"