PowerShell中如何对sls的Line对象执行-replace替换后按Line排序
PowerShell 检索VHD文件procedure定义并按过程名排序方案
问题原因
直接通过sls(Select-String别名)匹配到的procedure行自带前置缩进空白、procedure关键字前缀,未清理字段直接排序会将空白、关键字纳入排序权重,无法得到按纯过程名排序的结果。
完整实现命令
Get-ChildItem -Recurse -Filter *.vhd | Select-String -Pattern '^\s*procedure\s' | Where-Object { $_.Line -notmatch 'end' } | ForEach-Object { $_.Line = $_.Line -replace "^\s+procedure\s*", "" $_ } | Sort-Object Line | Select-Object Line, FileName
逻辑说明
- 递归遍历当前目录下所有后缀为
.vhd的文件 - 通过
Select-String匹配所有行首带任意缩进、包含procedure关键字的行 - 过滤带
end的procedure结束行,排除无效匹配内容 - 遍历匹配结果时,执行正则替换清除行首空白、
procedure关键字及紧随其后的空白字符,仅保留干净的过程名内容 - 基于清理后的Line字段执行排序,即可得到按过程名字典序排列的结果,最终输出过程名、所属文件名两个字段
内容的提问来源于stack exchange,提问作者pico
相关产品推荐
相关产品推荐

