如何通过循环将非bis文件中#开头的行添加到对应bis文件的开头
实现方案
你可以直接用bash循环批量完成操作,不需要复杂逻辑:
方案1:编号连续的场景(你的示例为1~3连续编号)
直接遍历对应编号即可:
for num in {1..3}; do # 提取非bis文件的#开头行,和原bis文件内容合并后覆盖写入 grep '^#' "${num}.txt" | cat - "${num}-bis.txt" > tmp && mv tmp "${num}-bis.txt" done
命令说明:
grep '^#' "${num}.txt":精准匹配行首为#的行,避免误匹配内容中间带#的行cat - "${num}-bis.txt":-代表接收管道传递的#开头行内容,拼接顺序为「#开头行在前、原bis文件内容在后」- 用临时文件中转后覆盖原文件,避免直接读写同一文件导致内容丢失
方案2:编号不连续的场景
自动识别所有符合格式的非bis文件,匹配对应bis文件处理:
for file in [0-9]*.txt; do # 提取文件编号(去掉后缀.txt) num=${file%.txt} # 仅当对应bis文件存在时执行操作 if [ -f "${num}-bis.txt" ]; then grep '^#' "${num}.txt" | cat - "${num}-bis.txt" > tmp && mv tmp "${num}-bis.txt" fi done
测试方法
正式修改前可以先执行以下命令打印处理后的结果,确认符合预期再执行正式写入操作:
for num in {1..3}; do echo "=== ${num}-bis.txt 处理后 ===" grep '^#' "${num}.txt" | cat - "${num}-bis.txt" done
内容的提问来源于stack exchange,提问作者vmicrobio
相关产品推荐
相关产品推荐

