Вы можете сделать следующее:
$input_path = "d:\txt\*.txt"
$output_file = 'd:\out.txt'
$regex = "\w* (\w\.? )?\w* (was )?[B|b]orn .{100}"
Select-String -Path $input_path -Pattern $regex -AllMatches | Foreach-Object {
$currentMatches = $_
$_.Matches | Foreach-Object { $_.Value,$currentMatches.Filename -join ' | ' } |
Add-Content $output_file
}
Объяснение:
Select-String
вернет коллекцию MatchInfo
объектов. Каждый из этих объектов имеет свойство Filename
, которое содержит только имя файла, содержащего совпадения. Поскольку в одном файле может быть несколько совпадений (из-за -AllMatches
), необходимо выполнить итерацию каждого совпадения в объекте MatchInfo
.
Оператор -join
объединяет все элементы в коллекции с определенным разделителем строк.