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

如何提取文件中指定开头到空行的内容插入另一文件首行且去重

实现方案

完整可执行shell脚本

# 从源文件提取第一个以 `- name: ` 开头、到空白行结束的段落,移除末尾空白行后存入变量
extract_content=$(sed -n '/^- name: /,/^[[:space:]]*$/p' dire1/main.yml | sed '/^[[:space:]]*$/d')

# 无匹配内容直接退出
[ -z "$extract_content" ] && exit 0

# 提取匹配内容的首行用于去重校验
extract_first_line=$(echo "$extract_content" | head -n 1)
# 读取目标文件首行,文件不存在则返回空
readme_first_line=$(head -n 1 dire2/README.md 2>/dev/null || echo "")

# 首行不一致才执行插入操作
if [ "$extract_first_line" != "$readme_first_line" ]; then
  # Linux环境插入到目标文件首行
  sed -i "1i\\$extract_content" dire2/README.md
  # MacOS环境请替换上面的sed命令为下一行
  # sed -i '' "1i\\$extract_content" dire2/README.md
fi

逻辑说明

  • 提取规则适配你给出的两个示例:/^- name: /,/^[[:space:]]*$/p 匹配从行首- name: 开始,到纯空白行(含空格、制表符)结束的所有内容,后续sed命令移除末尾的空白行,输出和你要求的示例结果一致。
  • 如果你需要匹配特定名称的段落,把第一个sed的匹配规则/^- name: /改成对应的内容即可,比如匹配first step就改为/^- name: first step /,你之前的命令就是因为写死了未定义的string关键字才匹配不到内容。
  • 去重逻辑直接比对匹配内容的首行和目标文件首行,完全一致就跳过插入,避免重复。
  • 插入操作用sed的1i语法直接在目标文件第一行前插入内容,不需要额外生成临时文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:36:02