下面有两个文本文件
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