You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell文本处理求助:移除指定前缀、过滤大编号并去重

公交路线文本处理问题解决

需求

  • 移除每行中“Local”之前的所有文本
  • 过滤掉路线编号大于90的条目
  • 删除重复行

原脚本问题分析

先看你写的错误脚本:

Get-Content C:\Temp\Buses.txt
-replace "Local [-1]", ""   
-replace "90 [+1]", ""
Set-Content C:\Temp\Buses1.txt 

问题出在这几点:

  1. 管道语法错误:PowerShell里命令要连续执行必须用管道|连接,分开写的话每一行都是独立命令,根本不会联动
  2. 正则表达式完全错误:
    • "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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:05:23