我有一个完美的正则表达式,但我想添加找到正则表达式的文件,当前代码:
$results = Get-ChildItem ../MyDir -filter "*.txt" -Recurse | Get-Content |
Select-String -pattern "Token: ([^']*)" -AllMatches |
% {$_.Matches} | % {$_.Groups[1].Value}
需要:
$results = Get-ChildItem ../MyDir -filter "*.txt" -Recurse | Get-Content |
Select-String -pattern "Token: ([^']*)" -AllMatches |
% {$_.Matches} | % {<<FileNameMatchWasFoundIn>> + $_.Groups[1].Value}
这可能不会把它变成一个大的for循环吗?
答案 0 :(得分:1)
直接传送到Select-String
,结果输出对象将具有Path
属性,文件名为:
$results = Get-ChildItem ../MyDir -filter "*.txt" -Recurse | Select-String -pattern "Token: ([^']*)" -AllMatches |ForEach-Object {
New-Object psobject -Property @{
File = $_.Path
Matches = $_.Matches |% {$_.Groups[1].Value}
}
}
如果你只想要一个字符串作为结果:
$results = Get-ChildItem ../MyDir -filter "*.txt" -Recurse | Select-String -pattern "Token: ([^']*)" -AllMatches |ForEach-Object {
"{0}: {1}" -f $_.Path,$(($_.Matches|%{$_.Groups[1].Value}) -join ";")
}