tac 做什么
tac 按行倒序输出文件,相当于把 cat 反过来读:从最新往回看日志、倒查变更记录时比 tail 更直接 —— tail 只给尾部若干行,tac 能把整份文件的顺序翻转后从头看。用 -s 可以自定义分隔符,把按记录分块的文件(例如以 --- 分隔的多行记录)整块倒序,这在处理非行式文本时很有用。
基本信息
| 适用平台 | Linux 与类 Unix(GNU coreutils) |
|---|---|
| 语法 | tac [选项] 文件...(不加文件则读标准输入) |
| 常用选项 | -s 指定分隔符、-r 分隔符按正则解释、-b 分隔符附着在前一条记录之后 |
| 默认行为 | 按换行分块,整读文件后倒序输出 |
| 相关命令 | tail -n、sort -r、less +F |
典型使用场景
- 日志从最新往回看(tac app.log | head -20)
- 多行记录文件整块倒序(每条记录以 --- 之类的分隔符结束)
- 一批候选结果从最后一条往前处理
- 比对配置时从尾部开始定位差异出现的分界
- 演示或教学时直观展示“文件被反向读取”
常用示例
常用示例
tac app.log | head -20 # 最新日志置顶(与 tail -20 的顺序相反)
tac -s '---' record.txt # 按自定义分隔符整块倒序
tac -s '---' -r record.txt # 分隔符按正则解释,可匹配变长分隔符
tac -b -s '---' record.txt # 分隔符附着在前一条记录之后,输出位置不同
ls /var/log/*.log | tac # 列表本身也能倒序,先看最近生成的文件
tac app.log | head -5 | cut -c1-80 # 倒序后再截取,快速看最近几条的关键信息选项读法
| 选项 | 作用 | 注意 |
|---|---|---|
| 默认(无选项) | 按换行切成块再倒序输出 | 就是最常见的“行倒序” |
| -s 分隔符 | 把分隔符当作块边界 | 处理多行记录文件的关键选项 |
| -r | 分隔符按正则解释 | 支持变长分隔符,例如匹配多连字符 |
| -b | 分隔符附着在前一条记录之后 | 分隔符位置变化会影响解析脚本 |
| 与 sort -r 的区别 | tac 翻转顺序,sort -r 按字典序倒排 | 两者语义不同,别互相替代 |
tac 需要先把文件读进来处理:内存与耗时随文件大小增长。只想看尾部若干行时 tail 更合适,超大日志不要用 tac 硬扛。
最后一行没有换行符时,输出与直觉略有差异(缺失的尾换行会体现在第一条输出里)。做严格内容比对时先确认原文件的换行情况。