【问题标题】:How to get just the part around regex using powershell select string?如何使用 powershell 选择字符串获取正则表达式的部分?
【发布时间】:2013-06-12 14:51:03
【问题描述】:

我使用 powershell 中的 select-string 并且效果很好,但有时我不喜欢它为我提供匹配的整行,因为它包含(对我而言)不必要的信息。

有没有简单的方法让它在正则表达式之前只给我 10 个字符,在正则表达式之后给我 15 个字符? 我现在如何使用它的示例:

gci *.log | select-string "lastname"

【问题讨论】:

    标签: powershell select-string


    【解决方案1】:

    制作正则表达式(.{10})lastname(.{15}) 并使用Where-Object-match 运算符而不是Select-String

    gci *.log | ? { $_ -match '(.{10})lastname(.{15})' } | % {
      "{0}`t{1}" -f ($matches[1], $matches[2])
    }
    

    【讨论】:

      【解决方案2】:

      你需要使用组,你可以像这样使用命名组:

      gci c:\temp\_sotemp\*.log | 
          select-string -Pattern "(?<refvalue>lastname)" | 
          select -expand Matches | 
          foreach {$_.groups["refvalue"].value}
      

      【讨论】:

        【解决方案3】:

        请记住,您总是将管道对象发送到 Get-Member 以查看属性。

        PS C:\> $text = 'asdfqwerasdfqwerlastnameasdfqwerasdfqwerasdf'
        PS C:\> $text | Select-String -Pattern 'lastname' | Get-Member
        Name         MemberType Definition
        ----         ---------- ----------
        ...
        Matches      Property   System.Text.RegularExpressions.Match[] Matches {get;set;}
        
        PS C:\> ($text | Select-String -Pattern 'lastname').Matches
        
        Groups   : {lastname}
        Success  : True
        Captures : {lastname}
        Index    : 16
        Length   : 8
        Value    : lastname
        
        PS C:\> $index = ($text | Select-String -Pattern 'lastname').Matches.Index
        PS C:\> $text[($index-10)..($index+15)] -join ''
        
        erasdfqwerlastnameasdfqwer
        

        【讨论】:

          猜你喜欢
          • 2018-07-22
          • 1970-01-01
          • 2014-12-30
          • 1970-01-01
          • 1970-01-01
          • 2021-12-10
          • 2021-09-27
          • 2014-01-20
          • 2021-12-30
          相关资源
          最近更新 更多