【问题标题】:Powershell search string for array of patterns用于模式数组的 Powershell 搜索字符串
【发布时间】:2023-03-21 19:36:01
【问题描述】:

在 Powershell 中,如何在文本文件中的每一行中搜索模式数组? Select-string 的模式可以接受一个数组,但如果找到数组中的任何字符串,它就会返回一个真值。如果在行中找到数组中的所有字符串,我需要它返回 true(或实际上是行)。谢谢。

【问题讨论】:

    标签: string powershell design-patterns


    【解决方案1】:

    为了匹配一个字符串数组和一个模式数组,我相信你需要这样的东西:

    $patterns = @( ... )
    
    Get-Content sample.txt | % {
      $count = 0
      foreach ($p in $patterns) {
        if ($_ -match $p) { $count++ }
      }
      if ($count -eq $patterns.Length) { $_ }
    }
    

    或者像这样:

    $patterns = @( ... )
    
    $content = Get-Content sample.txt
    foreach ( $line in $content ) {
      $count = @($patterns | ? { $line -match $_ }).Length
      if ( $count -eq $patterns.Length ) { $line }
    }
    

    【讨论】:

      【解决方案2】:

      想不通

      Get-Content file.txt | 
      Where-Object {$_ -match $ptrn1 -and $_ -match $ptrn2 -and $_ -match $ptrn3}
      

      【讨论】:

        【解决方案3】:

        另外两种可能性:

        $patterns = 'abc','def','ghi'
        $lines = 'abcdefghi','abcdefg','abcdefghijkl'
        
        
        :nextline foreach ($line in $lines)
         {foreach ($pattern in $patterns)
          {if ($line -notmatch $pattern){continue nextline}
         }$line}
        
        abcdefghi
        abcdefghijkl
        

        一旦任何模式不匹配,这将放弃对一行的进一步处理。

        这一次对整个行集合起作用,而不是做一个 foreach:

        $patterns = 'abc','def','ghi'
        $lines = 'abcdefghi','abcdefg','abcdefghijkl'
        
        foreach ($pattern in $patterns)
        {$lines = $lines -match $pattern}
        $lines
        
        abcdefghi
        abcdefghijkl
        

        用您的 get-content 替换测试文字以填充 $lines。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-04
          • 2012-08-30
          • 1970-01-01
          • 2015-05-26
          • 1970-01-01
          • 1970-01-01
          • 2014-10-06
          相关资源
          最近更新 更多