head 是什么
head 输出文件开头的若干行,默认 10 行,是看 CSV 表头、配置文件结构、协议报文样例的第一选择。它同时支持按行(-n)与按字节(-c)两种口径,负数写法表示「除最后 N 行之外的全部」。多个文件一起给时会自动插入文件名标题,这一点在脚本里既是便利也是陷阱。
基本信息
| 适用平台 | Linux、Unix 通用(GNU coreutils) |
|---|---|
| 命令语法 | head [选项] [文件...] |
| 常用选项 | -n N 前 N 行 / -n -N 除最后 N 行 / -c N 前 N 字节 / -q 不打印标题 / -v 强制打印标题 / -z 以 NUL 分隔 |
| 与 tail 的关系 | 一个看头一个看尾,常配合用于快速摸清文件结构 |
典型使用场景
- 确认 CSV 或数据导出的表头字段名与顺序
- 快速看配置文件的段落结构,再决定改哪一段
- 取二进制文件头部字节做类型判断
- 抽样查看日志格式,写解析脚本前先确认字段分隔
- 与大文件配合:head 看开头结构,tail 看结尾现状
常用示例
常用示例
head app.log # 前 10 行
head -n 100 access.log # 前 100 行
head -c 512 header.bin # 前 512 字节
head -n -5 data.csv # 除最后 5 行之外的全部(GNU 扩展)
head -q -n 1 *.csv # 多文件只取值,不打印标题
head -v -n 3 *.conf # 强制打印标题,文件少时更清楚常用选项
| 选项 | 作用 | 提示 |
|---|---|---|
| -n N | 输出前 N 行 | 最常用的形式 |
| -n -N | 输出除最后 N 行之外的全部 | GNU 扩展,BSD 与 macOS 不支持 |
| -c N | 输出前 N 字节 | 适合二进制或定长记录 |
| -q | 多文件时不打印文件名标题 | 脚本解析更省事 |
| -v | 总是打印文件名标题 | 文件少时需要区分来源 |
| -z | 以 NUL 而不是换行分隔记录 | GNU 扩展 |
head -n -5 这种负数写法是 GNU 扩展,BSD 与 macOS 的 head 不支持;跨平台脚本要改用 sed、tac 或者 wc 加 tail 的组合来实现同样效果。
多个文件时每段前会加一行文件名标题,脚本里直接解析常被这一行绊倒;要么加 -q 去掉,要么只处理单个文件。
需要「除最后 N 行」之外的跨平台写法:先算总行数再用 head 截取,例如 head -n $(( $(wc -l < data.csv) - 5 )) data.csv;也可以用 sed 删除末行来实现。这两种方式在 BSD 与 macOS 上同样可用,比依赖 GNU 扩展的负数写法更稳。