tac 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,属于文本处理命令族(见文本处理命令族)。它是 cat(见cat)的倒影——从尾巴往前读。
tac 把文件按行逆序输出:最后一行先打、第一行最后打。名字就是 cat 反过来拼的。
一、基本用法
bash
tac file.log # 最后一行在前、第一行在后
tac a.txt > a.rev # 逆序存盘最朴素用途:日志通常最新在末尾,
tac一下让最新内容跑到最前面,配合 head 能快速看"最近的 N 条"。但注意大文件最好直接用 tail(见tail)。
二、以任意分隔符逆序块:-s / -b
bash
tac -s '.' file # 以 . 为分隔,按"段"逆序而非按行
tac -b -s '>' file # -b 把分隔符留在块前,适合按段落重组默认按行(
\n)逆序。-s指定别的分隔符把内容切成"块"再逆序,-b(before)控制分隔符贴在前一块还是后一块。处理按空行/特定标记分段的文本时有用。
三、实战:看最近日志
bash
tac app.log | head -50 | tac # 取最后50行但保持时间正序(最新在下)这个组合很巧:
tac把最新翻到前 →head -50取最新 50 条 → 再tac翻回正序。比单纯tail -50多一层可控性(比如中间还想 grep 过滤)。
四、与 cat / tail 对比
bash
cat file # 正序(首→尾)
tac file # 逆序(尾→首)
tail -n 50 file # 直接取末尾 50 行(更高效,见 [tail](/linux/cmd/tail.md))看"末尾内容"首选 tail(不必读全文件);
tac的价值在"逆序后还要继续管道处理"(如上面取最近 N 条再翻回正序)。
一句话总结
tac = 按行逆序输出(cat 倒拼):最后一行在前;-s 指定分隔符按"块"逆序、-b 控制分隔符位置;看最近日志可用 tac | head -N | tac 取最新 N 条且保持正序。纯取末尾内容用 tail(见tail)更高效,tac 胜在逆序后还能继续管道。