[英]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.