嘗試從powershell 中對輸出進行排序時,我沒有得到預期的輸出。winget list該Id列未排序。
# winget list | Sort-Object -Property Id
ScreenToGif NickeManarin.ScreenToGif 2.37.1 winget
Microsoft Visual C 2015-2019 Redist… Microsoft.VCRedist.2015 .x64 14.28.29325.2 14.34.318… winget
paint.net {28718A56-50EF-4867-B4C8-0860228B5EC9} 4.3.8
Python 3.10.0 (64-bit) {21b42743-c8f9-49d7-b8b6-b5855317c7ed} 3.10.150.0
Microsoft Support and Recovery Assist… 0527a644a4ddd31d 17.0.7018.4
-----------------------------------------------------------------------------------------------------------------------
Name Id Version Available Source
Paint 3D Microsoft.MSPaint_8wekyb3d8bbwe 6.2009.30067.0
Microsoft .NET SDK 6.0.402 (x64) Microsoft.DotNet.SDK.6 6.0.402 winget
3D Viewer Microsoft.Microsoft3DViewer_8wekyb3d8… 7.2010.15012.0
Microsoft Sticky Notes Microsoft.MicrosoftStickyNotes_8wekyb… 3.8.8.0
問:如何在 powershell中winget list按列對輸出進行排序?Id
我希望看到一個類似于 Bash 的 powershell 解決方案sort -k <column-number>,以對任何列進行排序。我不明白為什么這個明顯的功能在 powershell 中不可用?
uj5u.com熱心網友回復:
它輸出文本,而不是具有“Id”等屬性的物件。這個程式的輸出不是很聰明。看起來它也輸出一些特殊字符,例如…(U 2026 HORIZONTAL ELLIPSIS)。我想到的第一件事是切斷前 39 個字符,然后按第 40 列向前排序,從 Id 開始。這應該像 unix 中的 sort -k 。我相信將來會有一個 powershell 版本的 winget。用空格替換非 ascii 并跳過前 4 行。
# or -creplace '\P{IsBasicLatin}'
(winget list) -replace '[^ -~]',' ' | select-object -skip 4 |
sort-object { $_.substring(39) }
Python 3.10.0 (64-bit) {21b42743-c8f9-49d7-b8b6-b5855317c7ed} 3.10.150.0
paint.net {28718A56-50EF-4867-B4C8-0860228B5EC9} 4.3.8
Microsoft Support and Recovery Assist 0527a644a4ddd31d 17.0.7018.4
Name Id Version Available Source
ScreenToGif NickeManarin.ScreenToGif 2.37.1 winget
Microsoft .NET SDK 6.0.402 (x64) Microsoft.DotNet.SDK.6 6.0.402 winget
3D Viewer Microsoft.Microsoft3DViewer_8wekyb3d8 7.2010.15012.0
Microsoft Sticky Notes Microsoft.MicrosoftStickyNotes_8wekyb 3.8.8.0
Paint 3D Microsoft.MSPaint_8wekyb3d8bbwe 6.2009.30067.0
Microsoft Visual C 2015-2019 Redist Microsoft.VCRedist.2015 .x64 14.28.29325.2 14.34.318 winget
uj5u.com熱心網友回復:
這是我對避免ID列的硬編碼位置的問題的看法。至少在我的德語本地化系統上,該列在左側一個字符。搜索ID標題行中的單詞以確定要切掉多少進行排序。
# Strip two blank lines and split into header string and items array
$wgHdr, $null, $wgItems = winget list | Select-Object -skip 2
# Get the position of the 'ID' column.
$idPos = [regex]::Match( $wgHdr,'\bID\b' ).Index
# Sort beginning at the position of the 'ID' column
$wgItems | Sort-Object { $_.Substring( $idPos ) }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524876.html
標籤:电源外壳
上一篇:有可能是學習Git命令最好的網站
下一篇:根據名字和姓氏在本地創建用戶
