Saya mencari cara untuk memfilter daftar string di PowerShell oleh regex, lalu kelompokkan dan urutkan berdasarkan salah satu kelompok tangkapan.
Bayangkan daftar saya seperti ini:
bogus0
ACBXYZ-0000 hello
bogus1
ACBXYZ-0000 hello again
bogus2
ACBXYZ-0001 world
bogus3
ACBXYZ-0001 world
Pertama saya melakukan ini:
$list | select-string "^(ACBXYZ-\d+)(.*)"
Output yang mana
ACBXYZ-0000 hello
ACBXYZ-0000 hello again
ACBXYZ-0001 world
ACBXYZ-0001 world
Maka saya telah melakukan ini:
$list | select-string "^(ACBXYZ-\d+)(.*)" | % { "$($_.Matches[0].Groups[1].Value), $($_.Matches[0].Groups[2].Value.Trim(' ,-'))" } | sort | group | select name
Output yang mana
Name
----
ACBXYZ-0000, hello
ACBXYZ-0000, hello again
ACBXYZ-0001, world
Tapi sebenarnya saya ingin menampilkan ini:
Name
----
ACBXYZ-0000, hello
ACBXYZ-0001, world
karena pesan setelah nomornya bagus untuk dimiliki tetapi tidak terlalu penting.
Ada ide?
PS: Saya bisa mencapainya dengan skrip yang lebih rumit, tetapi saya mencari satu-liner.
sumber