Shell如何为匹配.md模式的行追加后缀,文件名取自另一配置文件
Shell批量修改同步文件内容解决方案
实现思路
你的思路是对的,外层循环读取stapel_old里的学科名,处理对应同步文件即可。不需要嵌套循环逐行读取同步文件内容,直接用sed的模式匹配+行尾追加功能即可实现需求,写法更简洁也不易出错。
可直接使用的代码
将以下代码插入到原有代码的末尾(即(tput sgr 0)行之后)即可:
# 批量处理所有学科的同步文件 # 跳过stapel_old最后一行的文件夹数量统计值 head -n -1 olddata/stapel_old | while IFS= read -r subject do # 跳过空行避免生成无效文件名 [ -z "$subject" ] && continue target_file="olddata/${subject}_old_sync" # 匹配含.md后缀的行,末尾追加:::#a1,原地修改文件 sed -i '/\.md/s/$/:::#a1/' "$target_file" done
注意事项
如果你是在macOS系统运行,sed的原地修改参数需要额外加空字符串,将对应行改为:
sed -i '' '/\.md/s/$/:::#a1/' "$target_file"
相比原有写法的优势
- 仅需一层循环,无需单独统计同步文件行数,
sed会自动遍历所有行完成匹配追加 - 避免了逐行读取内容再替换的写法,不会因为文件名含特殊字符、空格出现匹配错误
- 仅调用一次
sed即可完成单个同步文件的修改,运行效率更高 stapel_old文件全程仅做读取操作,不会修改原有内容
内容的提问来源于stack exchange,提问作者pingu
相关产品推荐
相关产品推荐

