如何在包含需要在 search/replace 参数中转义的字符的文件中查找复杂字符串
How to find a complex string in a file containing characters that need to be escaped in the search/replace parameter
我想在文件中搜索这个确切的字符串(引号、括号、& 符号等),但显然无法正确转义该字符串,因此我可以获得匹配项:
this._name='Search',this._url='https://www.google.com/search?q={keywords}&client=firefox&ie=utf-8&oe=utf-8',"
我目前的尝试包括:
Select-String -Path "C:\textfile.txt" -Pattern 'this._name=''Search'',this._url=''https://www.google.com/search?q={keywords}&client=firefox&ie=utf-8&oe=utf-8'',"'
Select-String -Path "C:\textfile.txt" -Pattern "this._name='Search',this._url='https://www.google.com/search?q={{keywords{{&client=firefox&ie=utf-8&oe=utf-8',`""
及其一些变体(包括使用反斜杠转义正斜杠),none 产生匹配。
(文本文件是在记事本中创建的一个简单文件,其中仅包含上面的第一个字符串,复制并粘贴只是为了确保)。
我也试过了
$stuff = Get-Content -Path 'C:\textfile.txt'
$newstuff = $stuff -replace '[String above in various escape variations]'
(我最终可能想使用它)看看它的行为是否不同,但运气不好。
此外,formatting/escaping 像这样的手动字符串会花费大量时间(而且显然容易出错)。是否有一种命令或工具可以用来快速生成完全转义的字符串,以便在 PowerShell 中与单引号 and/or 双引号字符串一起使用?
感谢您的帮助。谢谢
首先,您必须转义特殊的正则表达式字符 .
、?
和 {
。正则表达式 class 方法 Escape()
可以为您做到这一点。其次,您需要妥善处理内引号。任何可能过早关闭外部引号的内部引号都需要转义。您可以将这些引号加倍以进行转义。
$pattern = [regex]::Escape('this._name=''Search'',this._url=''https://www.google.com/search?q={keywords}&client=firefox&ie=utf-8&oe=utf-8'',"')
Select-String -Path C:\textfile.txt -Pattern $pattern
我想在文件中搜索这个确切的字符串(引号、括号、& 符号等),但显然无法正确转义该字符串,因此我可以获得匹配项:
this._name='Search',this._url='https://www.google.com/search?q={keywords}&client=firefox&ie=utf-8&oe=utf-8',"
我目前的尝试包括:
Select-String -Path "C:\textfile.txt" -Pattern 'this._name=''Search'',this._url=''https://www.google.com/search?q={keywords}&client=firefox&ie=utf-8&oe=utf-8'',"'
Select-String -Path "C:\textfile.txt" -Pattern "this._name='Search',this._url='https://www.google.com/search?q={{keywords{{&client=firefox&ie=utf-8&oe=utf-8',`""
及其一些变体(包括使用反斜杠转义正斜杠),none 产生匹配。 (文本文件是在记事本中创建的一个简单文件,其中仅包含上面的第一个字符串,复制并粘贴只是为了确保)。
我也试过了
$stuff = Get-Content -Path 'C:\textfile.txt'
$newstuff = $stuff -replace '[String above in various escape variations]'
(我最终可能想使用它)看看它的行为是否不同,但运气不好。
此外,formatting/escaping 像这样的手动字符串会花费大量时间(而且显然容易出错)。是否有一种命令或工具可以用来快速生成完全转义的字符串,以便在 PowerShell 中与单引号 and/or 双引号字符串一起使用?
感谢您的帮助。谢谢
首先,您必须转义特殊的正则表达式字符 .
、?
和 {
。正则表达式 class 方法 Escape()
可以为您做到这一点。其次,您需要妥善处理内引号。任何可能过早关闭外部引号的内部引号都需要转义。您可以将这些引号加倍以进行转义。
$pattern = [regex]::Escape('this._name=''Search'',this._url=''https://www.google.com/search?q={keywords}&client=firefox&ie=utf-8&oe=utf-8'',"')
Select-String -Path C:\textfile.txt -Pattern $pattern