删除一个文本文件中存在于另一个文本文件中的条目



下面有两个文本文件

exclude.txt
10.1.1.3
10.1.1.4
10.1.1.5
10.1.1.6
free.txt
10.1.1.3
10.1.1.4
10.1.1.5
10.1.1.6
10.1.1.7
10.1.1.8
10.1.1.9
10.1.1.10

我想写exclude.txt的条目从free.txt写入另一个文件

10.1.1.7
10.1.1.8
10.1.1.9
10.1.1.10

I tried:

compare-object  (get-content $freeips) (get-content $excludeip) -PassThru | format-list | Out-File $finalips

在最终输出中,我总是获得的第一个IP。txt

10.1.1.7
10.1.1.8
10.1.1.9
10.1.1.10
10.1.1.3

和另一种方法

$exclude = Get-Content "C:exclude.txt"
foreach($ip in $exclude)
{
get-content "C:free.txt" | select-string -pattern $ip -notmatch | Out-File "C:diff.txt"
}

但是这里我也得到了的条目exclude。txt

请告诉我哪里做错了

Select-String解决方案可能更快。此外,它不需要通过IP地址进行迭代,因为-Pattern参数接受字符串数组(String[])。关键是,默认情况下,模式表示一个正则表达式,其中点(.)是任何字符的占位符。要搜索文字模式,您应该使用-SimpleMatch开关:

$exclude = Get-Content .exclude.txt
get-content .free.txt |Select-String -pattern $exclude -NotMatch -SimpleMatch

注意:显示的exclude.txt文件顶部的空格表明文件顶部可能有一个空行(regex匹配任何字符串)。要删除空行,使用:

$exclude = Get-Content .exclude.txt |Where-Object { $_ }

比较时,$excludeip应该是referenceObject,$freeips在后面,如下所示:

compare-object (get-content $excludeip) (get-content $freeips) -PassThru | Out-File $finalips

相关内容

  • 没有找到相关文章

最新更新