如何在空文件或非空文件开头插入指定内容且无覆盖问题?
问题根因
你之前的方案存在两个核心缺陷:
1s/^/插入内容/逻辑是对已存在的第一行做行首替换,空文件不存在任何行,因此命令不会执行,插入失效- 每次执行
echo > file都会强制清空文件原有内容,因此后执行的sed操作必然覆盖之前的插入结果
可用解决方案
方案1:文件拼接法(全平台兼容,推荐)
该方案不依赖sed版本,所有Unix/Linux/macOS环境都可正常运行,无论文件是否为空都生效:
把需要插入到开头的内容先输出,再拼接原文件内容,最后覆盖回原文件即可:
# 一次性插入两行内容到开头,原内容自动后移 { printf '##phasing=none\n#INFO\tFORMAT\tunknown\n'; cat file; } > file.tmp && mv file.tmp file
如果需要分次插入不同内容,每次插入都按这个逻辑执行即可,不会覆盖已有内容:
# 第一次插入第一行内容 { echo '##phasing=none'; cat file; } > file.tmp && mv file.tmp file # 第二次插入第二行内容到最开头 { echo '#INFO FORMAT unknown'; cat file; } > file.tmp && mv file.tmp file
方案2:GNU sed原生插入(仅Linux环境可用)
如果你使用的是Linux默认带的GNU sed 4.2及以上版本,可以直接用i插入命令,空文件也能正常执行:
sed -i '1i\ ##phasing=none\ #INFO FORMAT unknown ' file
内容的提问来源于stack exchange,提问作者vmicrobio
相关产品推荐
相关产品推荐

