颜色突出显示选择字符串 powershell

颜色突出显示选择字符串 powershell

我有一个巨大的日志文件 (.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

相关内容