Select-String模式不匹配

时间:2014-12-23 16:37:30

标签: powershell

我将几百个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\*"

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

2 个答案:

答案 0 :(得分:3)

如果您确实在寻找\#,$##,##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\*"

答案 1 :(得分:1)

我的尝试,类似于马特:

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

结果:

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