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

如何使用sed将start行的关联数据追加到后续target行中?

问题解决:将start后的内容追加到后续target行

原始输入

start {data}
target {ABC}
start {data2}
target {DEF}
target {GHI}
start {data3}
target {JKL}
....

期望输出

start {data}
target {data ABC}
start {data2}
target {data2 DEF}
target {data2 GHI}
start {data3}
target {data3 JKL}
....

问题分析

你之前的sed命令仅能处理紧跟start的首个target行,且未正确提取并复用start后的内容,无法应对多个连续target的场景,因此达不到预期效果。

解决方案

推荐用awk实现,逻辑更直观且能处理所有情况:

awk '/^[[:space:]]*start/{curr=$2; gsub(/[{}]/,"",curr); print; next} /^[[:space:]]*target/{gsub(/\{/,"{"curr" ",$0); print}' input.txt

命令解释

  • 匹配到start行时:
    1. 提取第二个字段(即{data}这类内容)
    2. 去掉字段里的{},把纯内容存到变量curr
    3. 直接打印当前start行,跳过后续处理
  • 匹配到target行时:
    1. 把行里的{替换成{curr (curr是之前保存的start内容)
    2. 打印修改后的target行
  • 其他行(如果存在)会默认输出,无需额外处理

如果一定要用sed,可以用以下命令(逻辑相对复杂):

sed -n '/^[[:space:]]*start/{s/^[[:space:]]*start {\(.*\)}/&\n/p;h;s/^[[:space:]]*start {\(.*\)}/\1/;x;:a;n;/^[[:space:]]*target/{s/^[[:space:]]*target {\(.*\)}/target {\2 \1}/;p;ba};x;p}' input.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:36:07