Я бы предложил это:
$String1 = "Oatmeal"
$String2 = "Cake"
$String1Location = "C:\1.txt"
Select-String -Path $String1Location -Pattern $string1, $string2 -SimpleMatch | Group-Object Line | ForEach-Object {
$_.Group | Sort-Object LineNumber | Select-Object -Last 1
}
Или с помощью соответствия регулярному выражению
$StringsToSearch = "Oatmeal","Cake"
$String1Location = "C:\1.txt"
# build the regex
$pattern = '\b(' + (($StringsToSearch | ForEach-Object { [regex]::Escape($_) }) -join '|') + ')\b'
# this ends up in '\b(Oatmeal|Cake)\b' which means we are looking for these strings as whole string.
# if you also would like to search for strings that contain the search criteria, like 'Pancake',
# then use
# $pattern = ($StringsToSearch | ForEach-Object { [regex]::Escape($_) }) -join '|'
Select-String -Path $String1Location -Pattern $pattern | Group-Object Line | ForEach-Object {
$_.Group | Sort-Object LineNumber | Select-Object -Last 1
}
Примечание: если вы хотите, чтобы ваш вывод был отсортирован по номеру строки вв порядке возрастания просто добавьте | Sort-Object LineNumber
после последней закрывающей фигурной скобки.