首页/系统/Linux 运维命令速查/rev 反转每行字符
文本处理77 条

rev 反转每行字符

把每行字符顺序倒过来;配合 cut/sort 处理「后缀对齐」类文本,或做小玩具字符串变换。

Linux 运维命令速查系统更新于 2026-10-13

rev 是什么

rev 是 util-linux 提供的小工具,把每一行文本的字符顺序整个倒过来,逐行处理、不改行序也不改行数。它最早来自 BSD,如今随 util-linux 出现在各 Linux 发行版中,一般的 CentOS、Ubuntu、Debian 都能直接用。它的实用价值集中在「后缀对齐」类问题上:按域名顶级域排序、按 IP 地址末位分组,都是先 rev、再排序、最后 rev 回来的套路。

基本信息

适用平台util-linux(Linux 全系)、BSD 系系统
语法rev [文件...]
输入来源不给文件名时从标准输入读取,管道中最常用
编码影响按当前 locale 字符集处理多字节字符,结果与设置有关

典型使用场景

  • 按域名后缀分组排序:先 rev、sort、再 rev 还原,让同一顶级域的记录相邻
  • 日志里按 IP 段末位归组:地址反转后排序,相邻网段会聚到一起
  • 把以路径结尾的清单排到一起,使同一目录下的条目连续排列
  • 快速反转字符串,做回文判断或字符串小实验
  • 配合 cut 或 awk 处理靠右对齐字段的排序需求
  • 生成变形测试数据,验证程序是否对字段书写顺序敏感
  • 排查排序结果异常时,临时观察字符的真实排列

常用示例

常用示例
echo 'a.b.c' | rev                    # 输出 c.b.a
rev hosts.txt > hosts.rev            # 逐行反转整个文件
cut -d. -f1 domains.txt | rev | sort | rev   # 按顶级域尾部排序
printf 'abc\n中文\n' | rev            # 中文按当前 locale 处理,注意编码
LC_ALL=C rev file.txt | head        # 强制按字节处理,结果可预期
rev file.txt | diff - file.txt      # 与原文件比对,可挑出内容回文的行
tac file.txt | rev                  # 行序倒置叠加字符反转
rev access.log | sort | rev | head  # 反转-排序-还原的三段式用法

行为与影响

项说明备注
处理单位默认按字符处理,受 locale 影响LC_ALL=C 时按字节,多字节字符会被拆开
行序保持原顺序不变只反转每行内部字符
行数不减少也不增加换行符本身不参与反转
无参调用从标准输入读取管道与重定向场景常用
输出位置默认写标准输出需要落盘自行重定向
rev 按字节还是按字符取决于 locale 与具体实现:处理中文、emoji 等多字节内容时保持 UTF-8 区域设置更安全,否则可能切出乱码;反过来,若你就想按字节观察,用 LC_ALL=C 可以明确表达意图。
排序套路要记住三次方向:cut 取字段、rev 把要排序的部分翻到前面、sort 排完再 rev 回来。少了最后一步,输出的字段顺序就是反的,肉眼很容易忽略。
复杂字段重排(按第几列排序、交换两列位置)交给 awk 或 cut 更省事,rev 只适合「整行翻转」这种简单变换,把它当通用文本处理器会写出一串难懂的管道。

易错点

  • 在 LC_ALL=C 环境下 rev 中文会拆坏字节,输出乱码且不可逆;处理中文前先确认 locale 设置
  • rev 不改变行序,想按倒序输出整行应该用 tac,这两个工具常被混用
  • rev 只反转字符不解析字段,要把 a:b 换成 b:a 必须配合 cut 或 awk 才有意义
  • 反转-排序-还原三步里漏掉收尾的 rev:排序结果看似正确,字段顺序实际已经反了
  • 把 rev 的结果直接覆盖原文件:内容已失去原意,覆盖前先确认用途

数据来源与参考

  • man 1 rev(util-linux 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌