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

如何用sed将后续行的方括号内容批量追加到对应item行?

解决方案

可以通过利用sed的**保持空间(Hold Space)**来实现这个需求,核心思路是先收集所有带括号的detail条目信息,再遍历item行进行匹配替换。

适用GNU sed的命令(带扩展正则)

sed -iE '
# 收集带[]的detail条目,格式化为"name:内容"存入保持空间
/detail ([^[]*)\[(.*)\];/ {
    h
    s//\1:\2/
    H
    g
    s/\n/ /
    h
    d
}
# 处理item行,从保持空间取出对应信息替换
/item ([^,]*),/ {
    G
    s/item ([^,]*),(.*)\n\1:(.*)/item \1[\3],/
    s/\n.*$//
}
' File.txt

命令逻辑说明

  1. 收集detail信息:
    • 匹配带[]的detail行,提取名称([^[]*匹配到[之前的内容)和括号内的文本
    • 将提取的内容转换为name:内容的格式,追加到保持空间,累积所有这类条目
  2. 处理item行:
    • 将保持空间的内容追加到当前item行后
    • 查找当前item名称对应的name:内容映射,替换为item name[内容],的格式
    • 最后移除追加的保持空间内容,保留修改后的item行

为什么你的原命令无效

sed的反向引用仅能在同一个正则匹配-替换命令中生效,无法跨行引用之前匹配到的内容。所以必须先把需要的信息存储到保持空间,再在处理item行时调用这些信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 12:17:10