Powershell搜索到下一个模式

时间:2015-03-18 11:43:51

标签: regex powershell pattern-matching

我正在尝试解析.txt文件。示例内容如下。

这是我到目前为止所做的代码。我的意图是:

如果线匹配' ----- STRING(S)FOUND -------'然后在$ string1的第3列到第11列中获取字符串。

然后直到下一步' ------- STRING FOUND ----',匹配如果' .COM'是否存在。

最终输出将如下:

MEM1     .COM

MEM2     .COM


$foundCall = $false
$string1 = $null
# Script to find email

gc "D:\download\yoghaem2.txt" | % {
  if ($_ -match '----------- STRING(S) FOUND -------------------')
   {
    $string1 = ^(.{8}) # 3 to 11 column
  }  
  elseif ($string1 -ne $null) {
    if ($_ -match "\.com") { $foundCall = $true }
  }
}

if ($foundCall) {$string1} 



      MEM1 CONCAT#(7)       ----------- STRING(S) FOUND -------------------

          82  //    PARM=('%@ M=TEMPMSL ROMSL=(MSLPRO,MSLSYS)',
          83  //          '@% CMD="GENERATE MEMBER(&NAME) SYSTEM(.COM/OS)"')
          97  //    PARM=('%@ DSN SYSTEM (&DB.&TO)',
          98  //          '@% RUN PROGRAM(DCGBINIT) PLAN(DCGV330)',
          99  //          '@ LIB(''&CSPNODV..AELOAD'')',

      MEM2 CONCAT#(7)       ----------- STRING(S) FOUND -------------------

          63  //    PARM=('%@ M=TEMPMSL ROMSL=(MSLPRO,MSLSYS)',
          64  //          '@% CMD="EXPORT MEMBER(&NAME)',
          65  //          '@ TARGET(&XNAME) TYPE(.COM)"')

      MEM3 CONCAT#(7)       ----------- STRING(S) FOUND -------------------

1 个答案:

答案 0 :(得分:1)

使用Switch,最好猜测你想要的是什么。

#Create test file
(@'
MEM1 CONCAT#(7)       ----------- STRING(S) FOUND -------------------

          82  //    PARM=('%@ M=TEMPMSL ROMSL=(MSLPRO,MSLSYS)',
          83  //          '@% CMD="GENERATE MEMBER(&NAME) SYSTEM(.COM/OS)"')
          97  //    PARM=('%@ DSN SYSTEM (&DB.&TO)',
          98  //          '@% RUN PROGRAM(DCGBINIT) PLAN(DCGV330)',
          99  //          '@ LIB(''&CSPNODV..AELOAD'')',

      MEM2 CONCAT#(7)       ----------- STRING(S) FOUND -------------------

          63  //    PARM=('%@ M=TEMPMSL ROMSL=(MSLPRO,MSLSYS)',
          64  //          '@% CMD="EXPORT MEMBER(&NAME)',
          65  //          '@ TARGET(&XNAME) TYPE(.COM)"')

      MEM3 CONCAT#(7)       ----------- STRING(S) FOUND -------------------
'@).split("`n") |
foreach {$_.trim()} | Set-Content testfile.txt


#Script starts here:
Switch -File ./testfile.txt -Wildcard
 {
   '*----------- STRING(S) FOUND -------------------*'
   {
      $result = [PSCustomObject]@{
       Mem = $_ -replace '^(\S+).+','$1'
       Found = $null
      }
   }

   '*.com*'
   {
     $result.found = '.COM'
     $result
   }
 }



Mem                                                                 Found                                                             
---                                                                 -----                                                             
MEM1                                                                .COM                                                              
MEM2                                                                .COM