【问题标题】:Ignoring quotation marks within text string in Powershell忽略Powershell中文本字符串中的引号
【发布时间】:2020-08-11 15:59:36
【问题描述】:

我有这个sn-p的代码

     Get-Content -Tail 0 -Wait -Encoding "UTF8" $log | 
       Select-String "GroupEvents: Linedup for group “(.*)”, subgroup" |
        % {$_.matches.groups[1].value} |
         Write-SlowOutput -outputFile $output -waitFor $delay

Select-String 中的注意事项我正在尝试提取括号内的文本。请注意括号的两端都有引号。如果我删除这些,则返回的文本带有引号。所以我的问题是如何在脚本不失败的情况下删除引号。

sn-p 是 PowerShell 脚本的一部分,它在我的电脑上搜索游戏的日志文件并将提取的文本写入文本文件。

任何帮助表示赞赏,谢谢。

更新 - 我是否正确地认为我使用重音来防止引号被用于分隔?

【问题讨论】:

  • 括号是正则表达式的特殊字符。这就是为什么如果你想从字面上找到它们,你应该用“\”(反斜杠)转义它们。
  • 你能举一个源数据的一行的例子,你想提取什么吗? .* 组合将尝试匹配所有内容,这就是它可能无法按预期工作的原因。
  • 所以我想要的文本将类似于 Group Run。但文本实际上是什么并不重要。当我提取它时,它带有引号。所以我想摆脱它们,只留下文字。我正在考虑在每个引号前尝试重音。
  • @StephenCousins 分享一个搜索文本和预期输出的小示例可能会有所帮助。 ;-)

标签: powershell parentheses


【解决方案1】:

如果我理解,我认为问题在于您必须转义 Select-String 语句中的引号。一种方法是在双引号字符串中使用重音 (`) 字符:

Select-String "GroupEvents: Linedup for group `"(.*)`", subgroup" |

另一种方法是在字符串外部使用单引号,这不需要转义:

Select-String 'GroupEvents: Linedup for group "(.*)", subgroup' |

我个人更喜欢在外部使用单引号字符串,因为它使您的代码更具可读性。所以你的最终代码是:

Get-Content -Tail 0 -Wait -Encoding "UTF8" $log | 
   Select-String 'GroupEvents: Linedup for group "(.*)", subgroup' |
    % {$_.matches.groups[1].value} |
     Write-SlowOutput -outputFile $output -waitFor $delay

【讨论】:

  • 您的解决方案仍然适用 (+1),但请注意问题中字符串中嵌入的引号是印刷引号: (LEFT DOUBLE QUOTATION MARK, U+201C) 和 @ 987654329@(右双引号,U+201D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
  • 2021-08-06
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多