【问题标题】:Regex Assistance with Power shell - Filter and display correct informationPowershell 的正则表达式协助 - 过滤并显示正确的信息
【发布时间】:2018-11-28 17:59:36
【问题描述】:

我正在使用 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\]'} }

这张表上有数千个项目,所以我认为正则表达式是执行此操作的方法。有没有更好的方法让这个工作?

【问题讨论】:

    标签: regex powershell csv


    【解决方案1】:

    虽然它本身不违反 CSV 标准,但您提供的数据并不是真正的 CSV。您可以只使用 Get-Content 然后使用 -match 过滤:

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

    【讨论】:

    • 那么您提供的示例数据不完整。我获取了您提供的数据,将其保存在一个文件中,使用了此代码,它输出了第 1 行和第 2 行,而不是第 3 行。
    【解决方案2】:

    保存一个?Excel?作为 csv 的工作表并不能使其成为 csv - 至少不是格式良好的。

    我将其视为纯文本文件,并将其视为纯文本文件。

    见get-help about_comparison_operators -contains 不是基于正则表达式,而是文字

    如果你想删除行匹配 [N/A] 将你的 where 从 -contains 更改为 -notmatch 并转义 '\[N/A\]'

    【讨论】:

    • 我们使用的服务将其导出为 CSV 文件。我正在尝试使用 [N/A] 显示值。我可以担心下次导出
    • 那么文件名Remove NA.csv 有点误导。然后把-contains改成-match
    猜你喜欢
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2021-11-14
    • 2017-02-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    相关资源
    最近更新 更多