如果行包含变量A或B的值,则从文件中排除

时间:2019-02-05 12:18:31

标签: powershell

我正在使用Streamwriter写入文件,并且想排除与两个参数中包含的值匹配的任何行。我尝试了以下代码,但是当包含第二个条件($file_stream -notmatch $exclude_permission_type)时,它不输出任何值。

$exclude_user_accounts = 'account1', 'account2', 'account3' 
$exclude_permission_type = 'WRITE'

while ($file_stream = $report_input.ReadLine()) {
  if ($file_stream -notmatch $exclude_user_accounts -and $file_stream -notmatch $exclude_permission_type) { 
    $_report_output.WriteLine($file_stream)
  } 
}

1 个答案:

答案 0 :(得分:0)

即使仅在第一个条件下,您的代码也无法按预期的方式工作,因为字符串永远无法匹配字符串数组。 <string> -notmatch <array>将始终求值为true,即使该数组包含完全匹配项也是如此。您根本无法进行部分匹配。

从所有过滤器字符串中构建一个正则表达式:

$excludes = 'account1', 'account2', 'account3', 'WRITE'

$re = ($excludes | ForEach-Object {[regex]::Escape($_)}) -join '|'

然后使用该正则表达式过滤字符串:

if ($file_stream -notmatch $re) {
    $_report_output.WriteLine($file_stream)
}