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

如何用Bash处理含超长行与特殊符号的文本并提取指定字段

解决方案

用Python脚本处理(推荐)

由于文本包含大量特殊符号,awk/sed的正则处理容易因转义问题出错,Python的正则模块能更可靠地应对这类复杂场景。

以下是实现脚本:

import re

# 读取原文件内容
with open("input.txt", "r", encoding="utf-8") as f:
    content = f.read()

# 匹配keyword2的内容:EN开头+14位数字
keyword2_pattern = re.compile(r'"keyword2":"(EN\d{14})"')
# 匹配keyword6的内容:拆分前缀和后续文本,直到"keyword7"前结束
keyword6_pattern = re.compile(r'"keyword6":"((\d{2}-\d{2}-\d{2}-\d{3}-\d{3}-A\w*) - (.*?))(?=","keyword7")', re.DOTALL)

# 提取所有匹配项
keyword2_matches = keyword2_pattern.findall(content)
keyword6_matches = keyword6_pattern.findall(content)

# 生成输出内容,按分号分隔三列
output_lines = []
# 一一对应每组keyword2和keyword6,输出多行结果
for k2, (_, k6_prefix, k6_text) in zip(keyword2_matches, keyword6_matches):
    output_lines.append(f"{k2};{k6_prefix};{k6_text}")

# 写入新文件
with open("output.txt", "w", encoding="utf-8") as f:
    f.write("\n".join(output_lines))

脚本说明:

  • re.DOTALL参数让正则中的.可以匹配换行符,兼容超长行场景
  • 用(?=","keyword7")正向预查精准定位keyword6内容的结束位置,避免特殊符号导致匹配溢出
  • 支持多组keyword2和keyword6的提取,自动一一对应输出

替代方案:命令行工具组合(适合快速处理)

如果偏好命令行操作,可通过grep提取关键片段,再用awk拆分:

# 提取目标片段并格式化输出
grep -o '"keyword2":"EN\{1\}\d\{14\}"\|"keyword6":"\d\{2\}-\d\{2\}-\d\{2\}-\d\{3\}-\d\{3\}-A\w* - .*?"' input.txt | \
awk -F'"' '
    /keyword2/ {k2=$4}
    /keyword6/ {
        split($4, parts, " - ")
        print k2 ";" parts[1] ";" parts[2]
    }
' > output.txt

注意:此方案要求keyword2出现在对应keyword6之前,且文本中无嵌套双引号干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:45:32