有没有办法在 ripgrep for MS Windows(Powershell 或 CMD)中转义引号?

Is there a way to escape quotes in ripgrep for MS Windows (Powershell or CMD)?

我想使用 ripgrep.

在文本文件中查找字符串 "Hello(Hello 以双引号开头)

通常,在 Bash 或 ZSH 中,这可以通过使用反斜杠转义或使用单引号括起来来实现:

rg \"Hello
rg '"Hello'

但是,在 MS Windows(Powershell 和 CMD)中,我尝试了这些,但其中 none 有效:

rg \"Hello
rg '"Hello'
rg `"Hello
rg '`"Hello'

有没有办法在 MS Windows 中使用 ripgrep 转义单引号或双引号?

逐字字符串 "Hello 最终必须作为 \"Hello 传递给 rg"\"Hello" 也可以)。即,逐字 " 字符。必须 \-转义:

来自cmd.exe:

rg \^"Hello

^cmd.exe 的转义字符,确保 " 被逐字处理,并在调用 rg 之前被 cmd.exe 删除。
请注意,^ 在这里不是绝对必要的,但它可以防止 " 被视为双引号参数的开头,如果有其他参数,这可能会有所不同。

来自 PowerShell:

rg \`"Hello

`,PowerShell 的转义字符,确保 " 在调用 rg.

之前被逐字处理并被 PowerShell 删除

可以说,显式 \ 转义应该不是必需的,因为 shell 的职责是将参数正确传递给目标用户满足 shell 自己的转义要求后的可执行文件(在 cmd.exe 中使用 ^ 逐字转义 ",在 PowerShell 中使用 `

在 PowerShell 的上下文中, 中总结了这个有问题的行为。

请注意,在 PowerShell 中,仅当您调用 外部程序 时才需要这种额外的转义;它不需要 PowerShell- 内部 - 例如当您调用 Select-String 时,如 .

所示

如果您使用的是 powershell,您不妨这样做:

get-childitem file | select-string '"hello'

file:1:"hello

您可以使用rg -F \"Hello

   -F, --fixed-strings 
   Treat the pattern as a literal string instead of a regular expression. When this flag is used, special regular expression meta characters such as .(){}*+ do not
   need to be escaped.

   This flag can be disabled with --no-fixed-strings.