簡體   English   中英

Powershell搜索字符串以獲取模式數組

[英]Powershell search string for array of patterns

在Powershell中,您將如何在文本文件的每一行中搜索模式數組? 選擇字符串的模式可以接受一個數組,但是如果找到該數組中的任何字符串,它將返回一個真值。 如果在行中找到數組中的所有字符串,則需要它返回true(或實際上是行)。 謝謝。

為了使字符串數組與模式數組匹配,我相信您需要這樣的東西:

$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 }
}

從我的頭頂

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

另兩種可能性:

$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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM