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

sed如何将文件中的指定关键词替换为对应目录下的目标文件名

脚本错误原因与修复方法

核心错误原因

你给变量l赋值的逻辑不符合需求:

  • sed "${i}q;d" 目标文件命令的作用是读取指定文件的第i行内容,你把.dat文件的路径传入sed,最终拿到的自然是文件内容,而非你预期的文件名。
  • 按照你给出的命名规则,.dat文件名可以直接通过子目录数字计算得到,完全不需要读取文件或者调用额外命令。

修正后的脚本方案

批量处理所有子目录版本

可以直接遍历父目录下所有数字命名的子目录,自动完成所有替换:

find_replace_old_file_name="old_file_name"
# 替换为你的父目录实际路径
parent_dir="./parent"

# 遍历所有数字命名的子目录
for daughter_path in "$parent_dir"/[0-9]*; do
    # 提取子目录的数字名称
    daughter_num=$(basename "$daughter_path")
    # 按规则构造dat文件名
    target_dat_name="$((daughter_num * 1000)).dat"
    # 可选:判断对应dat文件是否存在,避免无效替换
    if [ -f "${daughter_path}/data/${target_dat_name}" ]; then
        # 执行替换,macOS系统请把sed -i改成sed -i ''
        sed -i "s/${find_replace_old_file_name}/${target_dat_name}/g" "${daughter_path}/input"
    fi
done

单子目录处理版本(适配你原有写法)

如果是每次传入单个daughter变量处理单个子目录,可以直接简化为:

find_replace_old_file_name="old_file_name"
# daughter为传入的子目录数字
target_dat_name="$((1000 * daughter)).dat"
# 执行替换,macOS系统请把sed -i改成sed -i ''
sed -i "s/${find_replace_old_file_name}/${target_dat_name}/g" "parent/${daughter}/input"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:36:03