我有一个文本文件,每行都有一个这样的句子:
XXXX - hi
XXXX - hello
XXXX - whatever
WW - blabla
WW - blblbl
CCC - nice
CCC - common
CCC - itsux
CCC - regex
BBBB_BBB - flibidibalala
我正在尝试做的是使用 PowerShell 创建一个正则表达式来对以下内容进行排序,如下所示:
XXXX
WW
CCC
BBBB_BB
我想对第一个文件行进行排序,使其在" -"之前只有一次部分。我试过这样的事情:
Get-Content coucou2.txt -Filter '(w - )?'
Get-Content coucou2.txt -Filter 'w - ?'
Get-Content coucou2.txt -Filter 'w - {1}'
Get-Content coucou2.txt -Filter '(w - ){1}'
Get-Content coucou2.txt | Select-String 'w - {1}'
Get-Content coucou2.txt | Select-String '(w - ){1}'
Get-Content coucou2.txt | Select-String '(w - )?'
Get-Content coucou2.txt | Select-String 'w - ?'
但他们都没有工作,有人有想法或只是帮助我的线索吗?
以下使用 -Split
的解决方案就足够了。
# sort.txt file contains the strings in your example randomized
Get-Content sort.txt
WW - blblbl
CCC - nice
CCC - itsux
CCC - regex
BBBB_BBB - flibidibalala
XXXX - whatever
WW - blabla
CCC - common
XXXX - hello
XXXX - hi
# Code to sort and output sorted strings
Get-Content sort.txt | ForEach-Object {
($_ -split " - ")[0]} | Sort-Object -Desc -Unique
XXXX
WW
CCC
BBBB_BBB
上面的方法拆分(-split
(每行(一次一条(由-
分隔,然后从结果拆分中抓取第一项([0]
(。进入Sort-Object
的管道按降序(-Desc
(排序,只输出唯一的对象(-Unique
((cudo的Lieven(。您还可以在此处使用 Group-Object
来获取 .name
属性,该属性将输出唯一的字符串。请参阅about_Split和排序对象。另请参阅组对象。
如果你对正则表达式死定了,你可以使用 -replace 运算符,但这包括重复项:
(Get-Content sort.txt) -Replace "(w+) - .*",'$1' | Sort-Object -Desc
XXXX
XXXX
XXXX
XX
WW
WW
CCC
CCC
CCC
CCC
BBBB_BBB
BB
使用与上述相同的方法显示无重复项:
(Get-Content sort.txt) -Replace "(w+) - .*",'$1' | Sort-Object -Desc -Unique
XXXX
XX
WW
CCC
BBBB_BBB
BB
请参阅关于比较运算符以查找有关-Replace
的详细信息。
对组进行分组可能更有趣:
> Get-Content .coucou2.txt|Group-Object {($_ -split ' ')[0]}
Count Name Group
----- ---- -----
3 XXXX {XXXX - hi, XXXX - hello, XXXX - whatever}
2 WW {WW - blabla, WW - blblbl}
4 CCC {CCC - nice, CCC - common, CCC - itsux, CCC - regex}
1 BBBB_BBB {BBBB_BBB - flibidibalala}
> Get-Content .coucou2.txt|Group-Object {($_ -split ' ')[0]} -NoElement
Count Name
----- ----
3 XXXX
2 WW
4 CCC
1 BBBB_BBB
> (Get-Content .coucou2.txt|Group-Object {($_ -split ' ')[0]} -NoElement).Name
XXXX
WW
CCC
BBBB_BBB