【问题标题】:Select-string escape character选择字符串转义字符
【发布时间】:2015-02-05 14:47:47
【问题描述】:

我正在尝试在目录 c:\bats\ 中搜索包含 unc 路径 \\server\public 的批处理文件

命令:

Get-ChildItem -path c:\bats\ -recurse | Select-string -pattern "\\server\public"

我收到与字符串 \\server\public 相关的错误:

Select-string : The string \\server\public is not a valid regular
expression: parsing "\\server\public" - Malformed \p{X} character
escape. At line:1 char:91
+ ... ts" -recurse | Select-string -pattern \\server\public
+                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidArgument: (:) [Select-String], ArgumentException
+ FullyQualifiedErrorId : InvalidRegex,Microsoft.PowerShell.Commands.SelectStringCommand

我尝试过使用各种转义符,例如 "\server\public""'\server\public'",但我总是收到同样的错误。

【问题讨论】:

    标签: powershell escaping character unc select-string


    【解决方案1】:

    尝试在搜索字符串周围使用单引号并指定 SimpleMatch。

    Get-ChildItem -path c:\bats\ -recurse | Select-string -pattern '\\server\public' -SimpleMatch
    

    【讨论】:

    • 如果模式在变量中怎么办?
    • @ShreedharDhanawade 我不知道你的情况,但我发现我的问题是我不小心使用了一个作为匹配数组的变量。我缩小到一个字符串并解决了问题。
    【解决方案2】:

    由于解决方案在@campbell.rw 的答案中,因此要进一步扩展该问题。 Select-String 参数-Pattern 支持正则表达式。反斜杠是控制字符,需要转义。不是您需要将其从 PowerShell 中转义,而是正则表达式引擎本身。转义字符也是反斜杠

    Select-string -pattern '\\\\server\\public'
    

    您可以使用正则表达式类中的静态方法为您完成这项艰苦的工作。

    Select-string -pattern ([regex]::Escape('\\server\public'))
    

    同样,在您的情况下,使用-SimpleMatch 是一个更好的解决方案。

    【讨论】:

    • 感谢您的澄清!
    猜你喜欢
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 2014-03-17
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多