You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用sed批量将指定txt内容插入对应inp文件第26行?

解决方案:批量将txt内容插入对应inp文件第26行

当然可以实现!这种按索引关联文件的批量操作,用bash循环配合sed命令就能高效完成,完全不需要复杂工具。

核心脚本实现

直接在目标目录(即执行ls能看到1 2 3 ... 9 files的目录)下运行以下bash脚本即可:

# 遍历1-9的父文件夹编号
for parent in {1..9}; do
  # 遍历每个父文件夹下1-7的子文件夹编号
  for child in {1..7}; do
    # 定义对应的inp文件和txt文件路径
    inp_file="./${parent}/${child}/${parent}-${child}.inp"
    txt_file="./files/${parent}/${child}.txt"
    
    # 先检查文件是否存在,避免因缺失文件报错(可选)
    if [ -f "${inp_file}" ] && [ -f "${txt_file}" ]; then
      # Linux环境下的sed命令:直接修改原文件,在第26行插入txt内容
      sed -i "26r ${txt_file}" "${inp_file}"
      
      # 如果是macOS系统,替换上面的sed命令为:
      # sed -i '' "26r ${txt_file}" "${inp_file}"
    fi
  done
done

命令细节解释

  • 循环逻辑:通过两层循环自动遍历所有父文件夹(1-9)和子文件夹(1-7),精准匹配对应的inptxt文件路径,完全不需要手动逐个操作
  • sed核心用法
    • 26r ${txt_file}r是sed的「读取文件并插入」命令,作用是在第26行之后插入目标txt文件的全部内容
    • -i:让sed直接修改原文件(Linux默认行为);macOS的sed需要额外加空字符串-i '',否则会自动生成.bak格式的备份文件
  • 存在性检查if [ -f ... ]的判断是可选优化,用来避免因文件缺失导致的报错,让脚本运行更稳定

实用注意事项

  1. 执行脚本前,请确认你处于正确的工作目录(即能看到1-9和files文件夹的目录)
  2. 建议先去掉-i参数做测试:sed "26r ${txt_file}" "${inp_file}",查看输出符合预期后,再添加-i修改原文件
  3. 如果需要在第26行之前插入内容,可以把26r改成25r(因为r命令默认是在指定行的后方插入内容)

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

火山引擎 最新活动