使用 Powershell 从包含特定单词的 CSV 中删除一行?
Using Powershell to strip a row from a CSV that contains a specific word?
这是我的 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" 的所有行。我已经找到了如何从字符串中删除特定单词,如何查找和替换等。不过我很难找到这个特定的函数。
您可以使用 Where-Object 导入 select 所有不包含 "Microsoft P" 的元素,然后导出:
Import-Csv test.csv | where {$_.Publisher -ne "Microsoft P"} | Export-Csv New.csv -notypeinfo
您可以按照 Mark Setchell 的建议使用 FINDSTR
。只需指明它是带有 /C
.
的文字搜索字符串
FINDSTR /V /C:"Microsoft P" SomeFile.CSV > NewFile.CSV
或者,如果您想要一个 PowerShell 解决方案,您可以忽略它是一个 CSV 文件这一事实,而将其视为一个文本文件。那么你可以:
Get-Content C:\Path\To\File.csv | Where{$_ -notmatch "Microsoft P"} | Out-File C:\Path\To\NewFile.csv
你可以使用
做多个字符串
FINDSTR /V /C:"Microsoft P" /C:"Linux R" /C:"Whatever W" SomeFile.CSV > NewFile.CSV
这是我的 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" 的所有行。我已经找到了如何从字符串中删除特定单词,如何查找和替换等。不过我很难找到这个特定的函数。
您可以使用 Where-Object 导入 select 所有不包含 "Microsoft P" 的元素,然后导出:
Import-Csv test.csv | where {$_.Publisher -ne "Microsoft P"} | Export-Csv New.csv -notypeinfo
您可以按照 Mark Setchell 的建议使用 FINDSTR
。只需指明它是带有 /C
.
FINDSTR /V /C:"Microsoft P" SomeFile.CSV > NewFile.CSV
或者,如果您想要一个 PowerShell 解决方案,您可以忽略它是一个 CSV 文件这一事实,而将其视为一个文本文件。那么你可以:
Get-Content C:\Path\To\File.csv | Where{$_ -notmatch "Microsoft P"} | Out-File C:\Path\To\NewFile.csv
你可以使用
做多个字符串FINDSTR /V /C:"Microsoft P" /C:"Linux R" /C:"Whatever W" SomeFile.CSV > NewFile.CSV