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

使用PowerShell提取证书链指定行时出现内容换行异常问题

解决PowerShell提取证书链行时内容折行的问题

问题原因

你遇到的"G2"被拆分到新行的情况,本质是原证书文件里的长逻辑行被折成了物理多行(比如证书主题/颁发者字段太长,生成文件时自动折行)。而Get-Content默认按物理换行符拆分每行,Select-String只会匹配包含s:/i:/v:的物理行,导致后续折行的内容(比如"G2")被当成单独的无匹配行,最终被错误拆分。

解决方案

方法1:一次性读取文件并匹配完整逻辑行

使用-Raw参数将整个文件读取为单个字符串,再用正则匹配从s:/i:/v:开始到下一个目标行前的所有内容,确保完整捕获逻辑行:

Get-Content "input.txt" -Raw | 
  Select-String -Pattern '(s:.*?|i:.*?|v:.*?)(?=\r?\n(?:s:|i:|v:|$))' -AllMatches | 
  ForEach-Object { $_.Matches.Value } | 
  Out-File "output.txt"
  • -Raw:避免按物理行拆分文件,保留完整的文本结构
  • 正则表达式:非贪婪匹配s:/i:/v:开头的内容,直到遇到下一个目标行开头或文件结尾,确保捕获完整的逻辑行

方法2:遍历合并折行内容

逐行读取文件,将连续的非目标行(不以s:/i:/v:开头)合并到上一行,再提取目标行:

$lines = Get-Content "input.txt"
$outputLines = @()
$currentEntry = $null

foreach ($line in $lines) {
    if ($line -match '^(s:|i:|v:)') {
        # 遇到新的目标行,先把之前累积的内容加入输出
        if ($currentEntry) { $outputLines += $currentEntry }
        $currentEntry = $line.Trim()
    } else {
        # 非目标行,追加到当前累积的内容后
        if ($currentEntry) { $currentEntry += $line.Trim() }
    }
}
# 加入最后一行累积的内容
if ($currentEntry) { $outputLines += $currentEntry }

$outputLines | Out-File "output.txt"

这种方法更直观,适合需要手动控制行合并逻辑的场景。

排查验证

可以先执行以下命令查看"G2"所在行的上下文,确认折行情况:

Get-Content "input.txt" | Select-String -Pattern 'G2' -Context 1,1

该命令会显示包含"G2"的行及其前后各1行,帮助确认是否是折行导致的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:45:25