由于转义序列,Powershell select-string失败

时间:2011-12-20 09:34:27

标签: powershell powershell-v2.0

我有一个包含以下内容的文件

change sets:
  promotion level: INITIAL
  depends on: 
    GEESF_R2.1.0.9.5179@\My_PVOB (MES@\My_PVOB)
    My_2.1.0.13.4875@\My_PVOB (Notification@\My_PVOB)
    MyComponents_8_8_2011.6859@\My_PVOB (SQLReporting@\My_PVOB)
    My_2.1.0.13.7098@\My_PVOB (Support@\My_PVOB)

我想阅读具有模式@ \ My_PVOB的内容

所以我写这样的select-string选项。

Select-string -pattern "@\My_PVOB)" -path "C:\Baselines.txt"

但是我得到了以下问题

parsing "@\My_PVOB)" - Unrecognized escape sequence \M.

即使将模式更改为

Select-string -pattern "@\\My_PVOB)" -path "c:\Baselines.txt"

我收到以下错误

 "@\\My_PVOB)" - Too many )'s.

知道怎么解决吗?

2 个答案:

答案 0 :(得分:4)

您可以使用Escape方法将元字符替换为其转义码:

PS> $pattern = [regex]::Escape('@\My_PVOB)')
PS> $pattern
@\\My_PVOB\)

PS> Select-String -Path c:\Baselines.txt -Pattern $pattern 

答案 1 :(得分:2)

圆括号是一个特殊字符,所以你应该逃避它:

Select-string -pattern "@\\My_PVOB\)" -path "c:\Baselines.txt"