我正在尝试寻找
装配="Foobar
在所有文件中并将输出定向到 tmp.txt
我试过(cmd/错误)
grep -r "Assembly=\"Foobar" . >> tmp.txt 错误(无效参数)
grep -r "Assembly=""Foobar" 。>> tmp.txt
错误(空间不足)grep -r 'Assembly="Foobar' . >> tmp.txt
错误(空间不足)
非常令人沮丧。有什么建议么?
您需要担心 grep 和 cmd.exe 的转义引号
grep 期望引号被转义为\"
cmd.exe 将引号转义为^"
. 引用是一个状态机,这意味着未转义的引号会打开和关闭引用语义。当引用打开时,特殊字符如<
, |
,&
等被视为文字。第一个未转义的引用打开引用语义。下一个引用关闭引用语义。只有在引用关闭时才能转义引用。不平衡的报价导致其余部分被引用。因此,在您的情况下,>>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 需要包含引号,因此您需要前三种形式中的任何一种。最后一种形式不适用于搜索词中的空格。