Unix环境下不使用cat命令合并多份TXT/HTML文件的方法
好问题!既然cat用不了,咱们还有不少靠谱的替代方案,都是Unix系统里自带的工具或者简单脚本,我给你列几个实用的:
用
awk命令直接合并
这是最接近cat用法的替代之一,awk本来就擅长文本处理,直接读取多个文件并输出内容即可:awk '{print}' file1.txt file2.html file3.txt > combined.txt解释一下:
{print}表示把每一行内容原封不动输出,多个文件会按你指定的顺序依次处理,最后通过>重定向到合并后的文件里。如果需要批量匹配文件,还能用上通配符,比如awk '{print}' *.txt *.html > combined.txt。用
sed命令实现无修改输出
sed同样能完成这个任务,只要给它一个空的命令,它就会把输入内容原封不动输出:sed '' file1.txt file2.html > combined.txt这个逻辑和awk类似,同样支持多个文件和通配符,非常简洁。
用
tail命令输出全部内容
平时tail用来查看文件末尾,但加上-n +1参数后,它会从文件第一行开始输出所有内容,刚好能用来合并文件:tail -n +1 file1.txt file2.html > combined.txt这个方法也很直观,而且
tail也是Unix系统默认自带的工具,不用额外安装。纯Shell重定向逐个追加(无外部命令)
如果不想调用任何文本处理命令,还可以用Shell的内置功能逐个追加内容:# 先创建/清空合并文件 > combined.txt # 遍历要合并的文件,逐行追加 for file in file1.txt file2.html; do while IFS= read -r line; do echo "$line" >> combined.txt done < "$file" # 可选:在每个文件末尾加换行,避免内容粘连 echo >> combined.txt done这个方法完全依赖Shell本身,不需要调用任何外部工具,适合极端场景下的需求。
用Python脚本灵活合并(适合复杂需求)
如果需要在合并前做一些预处理(比如过滤特定行、转换编码),写个简单的Python脚本会更灵活:import sys # 自定义输出文件名(第一个参数),默认是combined.txt output_filename = sys.argv[1] if len(sys.argv) > 1 else "combined.txt" # 要合并的文件是后续所有参数 input_files = sys.argv[2:] if len(sys.argv) > 2 else [] with open(output_filename, 'w', encoding='utf-8') as out_file: for filename in input_files: try: with open(filename, 'r', encoding='utf-8') as in_file: out_file.write(in_file.read()) # 可选:在文件之间添加换行,避免内容粘连 out_file.write('\n') except FileNotFoundError: print(f"警告:文件 {filename} 不存在,已跳过", file=sys.stderr)运行方式也很简单:
python combine.py merged_result.txt file1.txt file2.html这个脚本还加了错误处理,比直接用命令更健壮,适合需要自动化处理的场景。
这些方案里,前几个都是Unix系统默认预装的工具,和cat一样属于基础命令,不用担心依赖问题,你可以根据自己的场景选择最顺手的。
内容的提问来源于stack exchange,提问作者ECHO FOXTROT

