如何使用GNU grep for windows/dos来避免双引号?

Whi*_*uit 7 grep cmd gnu

我正在努力寻找

大会="Foobar的

在所有文件中并将输出定向到tmp.txt

我试过(cmd /错误)

grep -r"Assembly = \"Foobar".>> tmp.txt错误(无效参数)

grep -r"Assembly =""Foobar".>> tmp.txt
错误(空间不够)

grep -r'Assembly ="Foobar'.>> tmp.txt
错误(空间不够)

很沮丧.有什么建议?

dbe*_*ham 14

您需要担心转义grep和cmd.exe的引号

grep期望报价被转义为 \"

cmd.exe将引号转义为^".引用是状态机,意味着未转义的引号切换引用语义开启和关闭.当报价是一样的特殊字符<,|,&,等被视为文字.第一个未转义的引用打开引用语义.下一个报价将引用语义关闭.当引用为OFF时,只能转义引号.不平衡报价导致其余部分被引用.因此,在您的情况下,>>tmp.txtcmd.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
Run Code Online (Sandbox Code Playgroud)

如果您的搜索词包含空格,那么grep需要封闭的引号,因此您需要前三个表单中的任何一个.最后一种形式不适用于搜索词中的空格.