You need to enable JavaScript to run this app. 如何在Powershell中移除波浪线分隔文件记录内的JSON文本(含CRLF)
优惠活动
大模型
产品
解决方案
定价
更多

如何在Powershell中移除波浪线分隔文件记录内的JSON文本(含CRLF)

实现方案

核心处理逻辑

  • 因为原始记录内部自带不规则换行(内嵌JSON换行、请求头换行),逐行读取会把单条完整记录拆成多段,因此不采用逐行读取的方式,而是先把整个文件读为单一大字符串,抹除所有内置的CR/LF换行符,把被拆散的记录重新拼接为连续文本。
  • 用记录固定的末尾结构(UUID格式哈希值 + 标准12小时制时间戳)作为拆分锚点,不受中间冗余内容(JSON、请求头、SubscriberId字段)的干扰,统一拆分出独立的完整记录。
  • 对拆分完成的单条记录,按固定规则提取需要保留的四个字段,直接丢弃冗余内容。

可直接运行的Powershell代码

# 替换为你的实际文件路径
$inputFile = "C:\logs\raw_source.txt"
$outputFile = "C:\logs\cleaned_result.txt"

# 读取全量内容并合并所有零散行,抹除所有内置换行
$rawText = Get-Content $inputFile -Raw
$flatText = $rawText -replace "`r`n|`n|`r", ""

# 正则匹配单条记录的目标字段,非贪婪匹配避免跨记录捕获
$matchRule = "(?<test_plan>.*?)~(?<resp_status>.*?),Response Content:.*?(?<hash_id>[\w-]{36})~(?<time_stamp>\d{1,2}/\d{1,2}/\d{4}\s+\d{1,2}:\d{2}:\d{2}\s+(AM|PM))"

# 提取并拼接清洗后的记录
$cleanedData = [regex]::Matches($flatText, $matchRule) | ForEach-Object {
    $plan = $_.Groups["test_plan"].Value
    $status = $_.Groups["resp_status"].Value
    $hash = $_.Groups["hash_id"].Value
    $ts = $_.Groups["time_stamp"].Value
    "$plan~$status~$hash~$ts"
}

# 写入结果文件
$cleanedData | Out-File $outputFile -Encoding utf8

适配说明

  • 代码兼容两类待处理记录:无论记录中间是否存在多行JSON、请求头换行,只要存在",Response Content:"标记、末尾带固定格式的36位哈希值与时间戳,都会被正确识别,无需单独分支处理JSON结构。
  • 如果实际场景中哈希值长度不是固定36位,只需调整正则中[\w-]{36}的长度数字为实际值即可。
  • 采用非贪婪匹配模式,避免单条正则跨多个相邻记录捕获异常内容。

内容的提问来源于stack exchange,提问作者Jack Black

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 14:24:03