regex - 从 get-content 命令过滤正则表达式结果
问题描述
我有一个文本文件,每行都有一个这种形式的句子:
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]
从结果拆分中获取第一项 ( )。管道 intoSort-Object
以降序排序 ( -Desc
) 并仅输出唯一对象 ( -Unique
) (cudo 的Lieven )。您也可以Group-Object
在这里使用来获取.name
属性,这将输出唯一的字符串。请参阅about_Split和Sort-Object。另请参阅Group-Object。
如果您对正则表达式不满意,则可以使用 -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
.
推荐阅读
- iphone - 插入邮件签名iphone时出现错误'null'
- android - React Native 的后端框架选择
- mongodb - 如何在由于此错误而无法启动的辅助副本集成员上设置 featureCompatibilityVersion?
- wso2 - wso2 micro-integrator 7.0.0 服务链高级
- php - Laravel Gate::any() 返回恢复的值
- c++ - 指针赋值在递归函数中不起作用
- c - 在 C 中查询目录的替代 dir 命令
- c# - 如何确保在 Windows 关机事件中上传 FTP 文件?
- javascript - 运行扩展测试时 VSCode/Mocha 过早退出
- ruby-on-rails - Rails 向版主或管理员重播消息 - 取决于 created_at 日期