我正在尝试搜索
程序集=“Foobar”
在所有文件中并将输出定向到 tmp.txt
我已经尝试过(cmd/错误)
grep -r "Assembly=\"Foobar" . >> tmp.txt error (invalid argument)
grep -r "Assembly=""Foobar" . >> tmp.txt
error (not enough space)grep -r 'Assembly="Foobar' . >> tmp.txt
error (not enough space)
非常令人沮丧。有什么建议吗?
最佳答案
您需要担心 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 需要用引号引起来,因此您需要前三种形式中的任何一种。最后一种形式不适用于搜索词中的空格。
关于cmd - 如何使用适用于 windows/dos 的 GNU grep 转义双引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19815531/