cmd - 如何使用适用于 windows/dos 的 GNU grep 转义双引号?

标签 cmd grep gnu

我正在尝试搜索

程序集=“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/

相关文章:

grep - 如何在 Grep 语句中包含可选空格

linux - 打印大于两个字段的行

c - 目标不知何故没有被创建

terminal - 除了 CMD.EXE 之外,还有其他 Windows shell 吗?

windows-7 - Windows 7命令提示符: How do I execute a batch script from the command line?

python - 如何让我的命令行使用特定版本的 python?

cmd - 我如何在cmd中显示阿拉伯字母

bash - 命令来计算整个文件中单词的出现次数

c - 服务器突然终止(非套接字上的套接字操作)

gnu - 使用 Autoconf 检测另一个库中的预处理器宏