Сравнение ip в текстовом файле с файлом html

У меня есть текстовый файл, содержащий множество IP-адресов, и я хотел бы сравнить его с файлом HTML.

У меня есть несколько сценариев в Powershell, но результат не содержит точного IP-адреса, а IP-адрес начинается с последнего октета.

$file1 = Get-Content H:\Downloads\hnames.txt
$file2 = Get-Content H:\Downloads\cpdb2web_B976151009_1\Outputs\test.html

$result = "H:\Downloads\names.txt"

$file1 | foreach {
    $match = $file2 -match $_
    if ( $match ) {
        $match | Out-File -Force $result -Append
    }
}

hnames.txt (образец текстового файла)

10.66.94.16

output.txt

<a href="#network_object_Net_10.66.94.16_n28">Net_10.66.94.16_n28</a>
<a href="#network_object_Net_10.66.94.16_n28">Net_10.66.94.16_n28</a>
<td vAlign="top"><a name="network_object_Net_10.66.94.16_n28">Net_10.66.94.16_n28</a></td><td vAlign="top">
    </td><td vAlign="top">10.66.94.16<br>
    </td><td vAlign="top">10.66.94.168<br>
    </td><td vAlign="top">10.66.94.162<br>
    </td><td vAlign="top">10.66.94.164<br>

Я пробовал другой сценарий, но он тоже не работает,

$File1 = Get-Content H:\Downloads\hnames.txt
$File2 = Get-Content H:\Downloads\cpdb2web_B976151009_1\Outputs\test.html

$RegEx = "("
ForEach ($Line in $File1){
    $RegEx += "$Line|"
}

$RegEx = [regex]"$($RegEx.SubString(0,($RegEx.Length - 1))))"   #trim the last | out, we don't need it

$Search = $File2 | Select-String -Pattern $RegEx -AllMatches

ForEach($Match in $Search.Matches){
    Write-Output "$($Match.Value) was found in firewall"
}

Добро пожаловать в StackOverflow, было бы здорово, если бы вы также показали нам образец test.html.

Prasoon Karunan V 10.09.2018 10:48

привет, это конфиденциальный файл, но я могу поделиться с вами примером

Jerem 10.09.2018 14:07

Когда вы делитесь такими деталями, редактируйте их с помощью фиктивных данных, поэтому я использовал слово Образец

Prasoon Karunan V 10.09.2018 17:00
0
3
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто немного изменился (не тестировался), используйте $_ вместо того, чтобы соответствовать его IP-адресу, который вы хотите.

$file1 = Get-Content H:\Downloads\hnames.txt
$file2 = Get-Content H:\Downloads\cpdb2web_B976151009_1\Outputs\test.html

$result = "H:\Downloads\names.txt"

$file1 | Foreach-Object -Process {
    $match = $file2 -match $_
    if ( $match ) {
        $matches[0] | Out-File -Force $result -Append
    }
}

он не работает, names.txt содержит те же IP-адреса, что и hnames.txt, даже если этот IP-адрес отсутствует в html-файле

Jerem 11.09.2018 08:29

@Jerem Исправил код, чтобы использовать автоматическую переменную $matches.

Prasoon Karunan V 11.09.2018 22:17

Другие вопросы по теме