我想"Hello
在文本文件中使用ripgrep
.
通常,在 Bash 或 ZSH 中,这将通过用反斜杠转义或用单引号括起来来工作:
rg \"Hello
rg '"Hello'
但是,在 MS Windows(Powershell 和 CMD)中,我尝试了这些,但这些都不起作用:
rg \"Hello
rg '"Hello'
rg `"Hello
rg '`"Hello'
有没有办法在 MS Windows 中使用 ripgrep 转义单引号或双引号?
我想"Hello
在文本文件中使用ripgrep
.
通常,在 Bash 或 ZSH 中,这将通过用反斜杠转义或用单引号括起来来工作:
rg \"Hello
rg '"Hello'
但是,在 MS Windows(Powershell 和 CMD)中,我尝试了这些,但这些都不起作用:
rg \"Hello
rg '"Hello'
rg `"Hello
rg '`"Hello'
有没有办法在 MS Windows 中使用 ripgrep 转义单引号或双引号?
逐字字符串"Hello
最终必须传递\"Hello
给rg
("\"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的答案所示。
如果你在 powershell 中,你也可以这样做:
get-childitem file | select-string '"hello'
file:1:"hello