带电源外壳的Regex协助-过滤并显示正确的信息

时间:2018-06-19 17:35:26

标签: regex powershell csv

我正在使用Powershell来过滤和显示CSV所在行中带有“ [N / A]”的项目

以下是“摘要”标签下CSV上的项目

1) 629eda518c07d4012e04000034285c07.httpprxp.dll with hash [N/A] was executed on PC\KTD1234.
2) 6d4d73457f07d4011c0a0000b410742c.utcutil.dll with hash [N/A] was executed on PC\KTD1234.
3) 1qx4e22r.bp3.ps1 with hash [ca8a261820bf6a2a75390168e9e7264c396bfc689047ecd08f87df05c50dc72d] was executed on PC\KTD1234.

下面的代码是我拥有的,但似乎没有显示N / A项目

$CSV = Import-Csv "C:\Users\DS\Desktop\Scripts\Remove NA.csv" -Header "Summary" -Delimiter :  
foreach ($thing in $CSV){Write-Host $thing.Summary |  
 where  {$_.Summary -contains  '\[N/A\]'} }

此表上有数千个项目,因此我认为正则表达式是实现此目的的方法。有没有更好的方法来使此工作?

2 个答案:

答案 0 :(得分:2)

虽然它本身没有违反CSV标准,但您提供的数据实际上并不是CSV。您可以只使用Get-Content,然后使用-match进行过滤:

Get-Content "C:\Users\DS\Desktop\Scripts\Remove NA.csv" | Where-Object{$_ -match ' \[N/A\] '}

答案 1 :(得分:0)

保存?Excel?作为csv的工作表并不能使其成为csv-至少不是格式正确的人。

我将其视为纯文本文件,因此会对其进行处理。

请参见get-help about_comparison_operators-包含的内容不是基于RegEx而是基于文字

如果您要删除[N/A]匹配的行,请将您的位置从-contains改为-notmatch与转义的'\[N/A\]'