我有一个巨大的日志文件 (.log)。我试图找到一些需要突出显示的关键字,以便我可以更快地跳过日志中的其他行。但是,我不想只过滤 select-string,而是突出显示 select-string。另外,我对 Powershell 一无所知,到目前为止,我从谷歌搜索中得到了以下命令。
C:\users\proto> cat txtlog.log select-string "Valid" | write-host -foregroundcolor red
它没有输出我想要的内容,因为它仅返回红色的“有效”行,而不返回其他行。
答案1
添加格式颜色功能这里:
function Format-Color([hashtable] $Colors = @{}, [switch] $SimpleMatch) {
$lines = ($input | Out-String) -replace "`r", "" -split "`n"
foreach($line in $lines) {
$color = ''
foreach($pattern in $Colors.Keys){
if(!$SimpleMatch -and $line -match $pattern) { $color = $Colors[$pattern] }
elseif ($SimpleMatch -and $line -like $pattern) { $color = $Colors[$pattern] }
}
if($color) {
Write-Host -ForegroundColor $color $line
} else {
Write-Host $line
}
}
}
然后,将输出传输至 Format-Color:
cat txtlog.log | Format-Color @{ 'Valid' = 'Red' }
包含单词 Valid 的行将显示为红色,而其他行将显示为默认颜色。
答案2
这个怎么样???
$esc = "$([char]27)"
$FormatWrapRed = "$esc[91m{0}$esc[33m"
txtlog.log | Get-Content | ForEach {
If ($_ -match 'Valid') { $FormatWrapRed -f $_ }
ELse {$_}
}
或者(在我看来更好)将此过滤器定义添加到您的个人资料中:
Filter Wrap-Red {
$esc = "$([char]27)"
$WrapFormat = "$esc[91m{0}$esc[33m"
If ($_ -match 'Valid') { $WrapFormat -f $_ }
ELse {$_}
}
然后在任何控制台会话中,您都可以使用:
txtlog.log | Get-Content | Wrap-Red
或者:
gc txtlog.log | Wrap-Red