【问题标题】:Using Powershell to strip a row from a CSV that contains a specific word?使用 Powershell 从包含特定单词的 CSV 中删除一行?
【发布时间】:2015-01-14 18:40:21
【问题描述】:

以下是我的 CSV 文件中的一些示例行。

"ComputerName","Name","Publisher","InstallDate","EstimatedSize","Version","Wow6432Node"
"pcnumber1","Service Pack 1 for Microsoft Office 2013 (KB2850036) 32-Bit Edition","Microsoft P",,"0",,"True"
"pcnumber1","CCleaner","Piriform",,"0","5.01",

原始脚本从指定的计算机中提取大量有关已安装软件的信息,并将其输出为 CSV 格式。我想获取该 CSV 文件并删除其中包含“Microsoft P”的所有行。我已经找到了如何从字符串中删除特定单词、如何查找和替换等。不过,我很难找到这个特定的函数。

【问题讨论】:

  • FINDSTR /V "Microsoft P" SomeFile.CSV > NewFile.CSV
  • 这感觉很简单,我不知道我是怎么错过的。但是,如果我这样做,它似乎也会删除所有仅包含“Microsoft”一词的行。
  • “Microsoft P”只能在发布者栏找到?
  • 正确!我会指定的。

标签: powershell csv


【解决方案1】:

您可以使用 Where-Object 导入、选择所有不包含“Microsoft P”的元素,然后导出:

Import-Csv test.csv | where {$_.Publisher -ne "Microsoft P"} | Export-Csv New.csv -notypeinfo

【讨论】:

  • 这似乎是“PowerShell”的方式。
【解决方案2】:

或者,如果您想要一个 PowerShell 解决方案,您可以忽略它是 CSV 的事实,并将其视为文本文件。那么你可以:

Get-Content C:\Path\To\File.csv | Where{$_ -notmatch "Microsoft P"} | Out-File C:\Path\To\NewFile.csv

【讨论】:

    【解决方案3】:

    您可以按照 Mark Setchell 的建议使用 FINDSTR。只需用/C 表明它是一个文字搜索字符串。

    FINDSTR /V /C:"Microsoft P" SomeFile.CSV > NewFile.CSV
    

    【讨论】:

    • 感谢您的更正 - 我没有在 Windows 机器前测试它,这就是为什么我没有把它作为答案。投我一票。
    【解决方案4】:

    你可以使用多个字符串

    FINDSTR /V /C:"Microsoft P" /C:"Linux R" /C:"Whatever W" SomeFile.CSV > NewFile.CSV
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 2021-10-24
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多