我正在尝试搜索
大会=“Foobar的
在所有文件中并将输出定向到tmp.txt
我试过(cmd / error)
非常令人沮丧。有什么建议吗?grep -r“Assembly = \”Foobar“。>> tmp.txt 错误(无效参数)
grep -r“Assembly =”“Foobar”。 >> tmp.txt
错误(空间不足)grep -r'Assembly =“Foobar'。>> tmp.txt
错误(空间不足)
答案 0 :(得分:13)
您需要担心转义grep和cmd.exe的引号
grep希望引号转义为\"
cmd.exe将引号转义为^"
。引用是状态机,意味着未转义的引号切换引用语义开启和关闭。启用引号后,<
,|
,&
等特殊字符将被视为文字。第一个未转义的引用打开引用语义。下一个报价将引用语义关闭。当引用为OFF时,只能转义引号。不平衡报价导致其余部分被引用。因此,在您的情况下,>>tmp.txt
不被cmd.exe视为重定向,因此它将作为参数传递给grep。
以下任何一项都有效:
grep -r "Assembly=\"Foobar^" . >>tmp.txt
grep -r ^"Assembly=\"Foobar" . >>tmp.txt
grep -r ^"Assembly=\^"Foobar^" . >>tmp.txt
grep -r Assembly=\^"Foobar . >>tmp.txt
如果您的搜索字词包含空格,那么grep需要包含引号,因此您需要前三个表单中的任何一个。最后一种形式不适用于搜索词中的空格。