5

我想"Hello在文本文件中使用ripgrep.

通常,在 Bash 或 ZSH 中,这将通过用反斜杠转义或用单引号括起来来工作:

rg \"Hello
rg '"Hello'

但是,在 MS Windows(Powershell 和 CMD)中,我尝试了这些,但这些都不起作用:

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

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

4

2 回答 2

5

逐字字符串"Hello最终必须传递\"Hellorg"\"Hello"也可以)。也就是说,逐字"字符。必须\- 转义

来自cmd.exe

rg \^"Hello

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

PowerShell

rg \`"Hello

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


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

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

请注意,在 PowerShell 中,仅当您调用外部程序时才需要这种额外的转义内部不需要PowerShell-例如当您调用时Select-String,如js2010的答案所示。

于 2020-01-02T23:17:37.480 回答
0

如果你在 powershell 中,你也可以这样做:

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

file:1:"hello

于 2020-01-03T06:01:23.473 回答