如何基于文件名前两个词为批量TXT文件添加指定格式头部?
批量给文本文件添加自定义头部的Bash方案
当然可以!用Bash脚本就能轻松搞定这个批量操作,下面是具体的实现方法,还包含了安全备份的小细节:
方法一:用Bash循环+cut命令实现
直接在终端里运行这段脚本,或者保存成.sh文件执行:
# 遍历所有符合命名格式的txt文件 for file in *.txt; do # 跳过非文件(比如目录) [ -f "$file" ] || continue # 提取文件名中前两个下划线分隔的部分 # 先去掉.txt后缀,再取前两个字段 prefix=$(echo "$file" | sed 's/\.txt$//' | cut -d'_' -f1-2) # 生成要添加的头部内容 header=">c_${prefix}" # 临时文件存储添加头部后的内容,避免直接修改原文件出错 temp_file="${file}.tmp" # 将头部和原文件内容合并到临时文件 echo "$header" > "$temp_file" cat "$file" >> "$temp_file" # 替换原文件(可选:可以先备份原文件,比如把下面一行注释去掉) # cp "$file" "${file}.bak" mv "$temp_file" "$file" echo "处理完成:$file" done
方法二:用更高效的参数扩展(无需外部命令)
如果你的Bash版本比较新(4.0+),可以用参数扩展来提取前缀,避免调用sed和cut,速度更快:
for file in *.txt; do [ -f "$file" ] || continue # 去掉后缀:${file%.txt} 会把最后一个.txt去掉 filename_no_ext="${file%.txt}" # 提取前两个下划线分隔的部分:用%%_*_*来删除从第三个下划线开始的内容 prefix="${filename_no_ext%%_*_*}" header=">c_${prefix}" temp_file="${file}.tmp" echo "$header" > "$temp_file" cat "$file" >> "$temp_file" # 可选备份 # cp "$file" "${file}.bak" mv "$temp_file" "$file" echo "处理完成:$file" done
注意事项
- 备份原文件:建议先取消注释脚本里的
cp "$file" "${file}.bak"行,这样每个原文件都会生成一个.bak备份,避免操作失误导致数据丢失。 - 测试脚本:可以先找一个测试文件,单独运行脚本里的提取前缀命令,确认
prefix的结果是否正确,比如:test_file="word1_word2_word3_word4.txt" echo "$test_file" | sed 's/\.txt$//' | cut -d'_' -f1-2 # 应该输出 word1_word2 - 文件命名格式:确保所有目标文件都是
word1_word2_word3_word4.txt的格式,如果有不符合的文件,脚本会自动跳过(因为[ -f "$file" ]会检查是否是文件,而提取前缀的部分对于格式不对的文件可能得到错误结果,所以建议先筛选出符合格式的文件再处理)。
内容的提问来源于stack exchange,提问作者ZMP
相关产品推荐
相关产品推荐

