【问题标题】:Select-String pattern not matching选择字符串模式不匹配
【发布时间】:2015-02-21 20:02:55
【问题描述】:

我将几百个 Word 文档的文本保存到一个文件夹中的单个 .txt 文件中。我遇到了 Word 文档中的 MergeField 格式不正确的问题,现在我需要在文件夹中找到格式不正确的所有实例。不正确的格式是字符串\#,$##,##0.00\* 所以,我正在尝试使用 PowerShell,如下所示:

select-string -path MY_PATH\.*txt -pattern '\#,$##,##0.00\*'
select-string -path MY_PATH\.*txt -pattern "\#`,`$##`,##0.00\*"

但是这些命令都没有找到任何结果,即使我确定该字符串至少存在于一个文件中。我觉得错误正在发生,因为参数中有特殊字符(特别是$,)我没有正确转义,但我不确定如何格式化模式。有什么建议吗?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    如果您实际上是在寻找\#,$##,##0.00\*,那么您需要注意Select-String 使用正则表达式,并且您在其中有很多 控制字符。你的字符串应该是

    \\\#,\$\#\#,\#\#0\.00\\\*
    

    或者您可以使用正则表达式的静态方法Escape 来为您完成脏活。

    [regex]::Escape("\#,$##,##0.00\*")
    

    将所有这些放在一起,您会得到以下结果:

    select-string -path MY_PATH\.*txt -pattern ([regex]::Escape("\#,$##,##0.00\*"))
    

    或者更简单的是使用参数-SimpleMatch,因为它不会插入字符串.. 只是按原样搜索。更多here

    select-string -path MY_PATH\.*txt -SimpleMatch "\#,$##,##0.00\*"
    

    【讨论】:

      【解决方案2】:

      我的尝试,类似于 Matts:

      select-string -path .\*.txt -pattern '\\#,\$##,##0\.00\\\*'
      

      结果:

      test.txt:1:\#,$##,##0.00\*
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多