PowerShell文本处理求助:移除指定前缀、过滤大编号并去重
公交路线文本处理问题解决
需求
- 移除每行中“Local”之前的所有文本
- 过滤掉路线编号大于90的条目
- 删除重复行
原脚本问题分析
先看你写的错误脚本:
Get-Content C:\Temp\Buses.txt -replace "Local [-1]", "" -replace "90 [+1]", "" Set-Content C:\Temp\Buses1.txt
问题出在这几点:
- 管道语法错误:PowerShell里命令要连续执行必须用管道
|连接,分开写的话每一行都是独立命令,根本不会联动 - 正则表达式完全错误:
"Local [-1]"完全没法匹配“Local”之前的内容,逻辑混乱"90 [+1]"也不能筛选出编号大于90的路线,语法完全不对
正确脚本实现
下面是能满足需求的PowerShell脚本:
# 读取公交路线文件,逐行处理 Get-Content C:\Temp\Buses.txt | ForEach-Object { # 提取"Local"及之后的所有内容 $processedLine = $_ -replace '^.*?(Local.*)$', '$1' # 匹配并提取路线编号 if ($processedLine -match 'Local route (\d+)') { $routeNum = [int]$matches[1] # 只保留编号≤90的路线 if ($routeNum -le 90) { $processedLine } } } | Sort-Object -Unique | Set-Content C:\Temp\Buses1.txt
脚本说明
Get-Content读取目标文件内容,通过管道传给ForEach-Object逐行处理- 第一个
-replace用正则^.*?(Local.*)$匹配行首到“Local”的所有内容,替换成“Local”及之后的部分 - 用
-match捕获路线编号,转成整数后判断是否≤90,符合条件才输出该行 Sort-Object -Unique自动去除所有重复行- 最后用
Set-Content把处理后的结果写入新文件
处理后示例结果
处理你提供的示例文本后,输出内容为:
Local route 1
Local route 2
Local route 16
Local route 58
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

