#powershell
Вопрос:
У меня есть 2 текстовых файла, как показано ниже
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
Я пытался :
compare-object (get-content $freeips) (get-content $excludeip) -PassThru | format-list | Out-File $finalips
Здесь, в окончательном выводе, я всегда получаю первый IP-адрес exclude.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 в окончательном выводе.
Пожалуйста, дайте мне знать, где я здесь ошибаюсь
Ответ №1:
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 { $_ }
Ответ №2:
При сравнении $excludeip
должен быть объект referenceObject и $freeips
следует за ним, как это:
compare-object (get-content $excludeip) (get-content $freeips) -PassThru | Out-File $finalips
Комментарии:
1. Спасибо за ваш ответ, но он по-прежнему добавляет IP-адрес файла исключения в окончательный вывод
2. Извините. При сравнении $excludeip должен быть объектом ссылки, а $freeips занимает второе место. Я отредактирую свой ответ.