gpt4 book ai didi

powershell - PowerShell 中的着色数组筛选器

转载 作者:行者123 更新时间:2023-12-05 03:19:09 24 4
gpt4 key购买 nike

试图找出如何为数组中的某些过滤器着色以便于在控制台上阅读。换句话说,随着控制台的前进,如果出现“[Behaviour] OnPlayerJoined”,则将该文本涂成绿色。

$filters = @(
################## FILTERS ##################
"[Behaviour] OnPlayerJoined",
"[Behaviour] OnPlayerLeft ",
"[API] Received Notification: <Notification"
#############################################
)
mode 300
$host.UI.RawUI.ForegroundColor = "White"
$host.UI.RawUI.BackgroundColor = "Black"
cd C:\Users\$env:UserName\AppData\LocalLow\VRChat\VRChat
$taco = Get-ChildItem -Attributes !Directory . | Sort-Object -Descending -Property LastWriteTime | select -First 1
Get-Content -Path $taco.name -Wait | Select-String -Pattern $filters -SimpleMatch

最佳答案

  • PowerShell (Core) 7+ 中,您可以自动获得所需的行为:在每个的 for-display 输出中匹配线, Select-String现在突出显示匹配的部分

    • 但是,您无法控制突出显示的颜色,它基于反转(交换)当前背景和前景色;例如,执行 'oof', 'barn', 'baz' |选择字符串 'oo', 'ar', 'az' 打印:
      • screenshot PSv7
    • 您可以使用-NoEmphasis选择退出突出显示。
  • Windows PowerShell 中,您必须实现自己的解决方案 - 见下文。

以下是适用于您的情况的有限解决方案:

'oof', 'barn', 'baz' |             # sample input
Select-String 'oo', 'ar', 'az' | # search for sample patter
ForEach-Object { # print the matching parts in green
$m = $_.Matches[0]
if ($m.Index -ge 1) { Write-Host -NoNewLine $_.Line.Substring(0, $m.Index) }
Write-Host -NoNewline -ForegroundColor Green $_.Line.Substring($m.Index, $m.Length)
Write-Host $_.Line.Substring($m.Index + $m.Length)
}

示例输出:

screenshot custom implementation

注意:

  • 如果指定了 -AllMatches 开关,则突出显示每个输入字符串的多个匹配项,不受上述支持。

  • PowerShell (Core) 7+ 内置实现的 C# 源代码,确实支持-AllMatches,在方法EmphasizeLine 中() 在类 MatchString.cs 中;在撰写本文时,永久链接是 here .请注意,着色是通过在输出字符串中嵌入 VT (ANSI) 转义序列来实现的。

  • 有关基于模式的通用输出着色解决方案,请参阅 this answer ,它定义了自定义函数 Out-HostColored,也可作为 Gist 使用。

关于powershell - PowerShell 中的着色数组筛选器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73520269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com