如何用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),精准匹配对应的
inp和txt文件路径,完全不需要手动逐个操作 - sed核心用法:
26r ${txt_file}:r是sed的「读取文件并插入」命令,作用是在第26行之后插入目标txt文件的全部内容-i:让sed直接修改原文件(Linux默认行为);macOS的sed需要额外加空字符串-i '',否则会自动生成.bak格式的备份文件
- 存在性检查:
if [ -f ... ]的判断是可选优化,用来避免因文件缺失导致的报错,让脚本运行更稳定
实用注意事项
- 执行脚本前,请确认你处于正确的工作目录(即能看到1-9和files文件夹的目录)
- 建议先去掉
-i参数做测试:sed "26r ${txt_file}" "${inp_file}",查看输出符合预期后,再添加-i修改原文件 - 如果需要在第26行之前插入内容,可以把
26r改成25r(因为r命令默认是在指定行的后方插入内容)
内容的提问来源于stack exchange,提问作者Jan Rostenkowski




