通过多次搜索搜索文件,并删除文件中的匹配项

时间:2018-11-06 16:01:22

标签: powershell foreach select-string

我有一个文本文件,其中包含一列IMEI(file1.txt)。我还有第二个文件,其中包含一列IMEI(file2.txt)。

我想做的是获取file2.txt中的每个IMEI,并搜索file1.txt以查找任何匹配项,然后在找到匹配项时,删除file1.txt中的该行。

让我一次执行多个搜索变得很困难。一次执行每个操作都需要花费相当长的时间,因为每个文件中都有数百个IMEI。

有人对完成这项任务有什么建议吗?

脚本:

$orders = Get-Content c:\file2.txt
foreach ($order in $orders) {
    Get-Content file1.txt | Select-String -Pattern "$order" -NotMatch
}

以上方法有效,但是由于我要搜索数百个“匹配项”,因此每次都会返回“不匹配项”,因此它返回数千个结果。

1 个答案:

答案 0 :(得分:1)

您可以在此处使用compare-object

$file1 = (1234,5678,9123)
$file2 = (1234)

$remove = Compare-Object $file1 $file2
$remove = $remove | Where{$_.SideIndicator -ne '=>'}
$file1 = $remove.inputobject

这将删除相等的内容,只返回第一个文件中的内容,同时删除所有类似IMEI的内容。然后,您可以使用Out-File导出它并覆盖以前的文件。