You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Bash中的sort命令正确识别下划线进行排序?

解决Unix sort命令下划线排序不符合Vim字典序的问题

当前文件夹列表

执行ls -1 .得到如下结果:

$ ls -1 . 
_dns
linux
mariadb
minio
mongodb
nginx
_postgresdb
_python
_rabbitmq
redis
sphinx
supervisor
$

期望的Vim风格字典序排序结果

希望得到如下排序效果:

$
_dns
_postgresdb
_python
_rabbitmq
linux
mariadb
minio
mongodb
nginx
redis
sphinx
supervisor
$

sort命令的尝试结果

直接使用sort命令无法得到期望结果:

$ ls -1 . | sort
_dns
linux
mariadb
minio
mongodb
nginx
_postgresdb
_python
_rabbitmq
redis
sphinx
supervisor
$

添加-g、-b、-n等参数后,结果依然不符合预期:

$ ls -1 . | sort  -g
_dns
linux
mariadb
minio
mongodb
nginx
_postgresdb
_python
_rabbitmq
redis
sphinx
supervisor
$

$ ls -1 . | sort  -b
_dns
linux
mariadb
minio
mongodb
nginx
_postgresdb
_python
_rabbitmq
redis
sphinx
supervisor
$

$ ls -1 . | sort  -n
_dns
linux
mariadb
minio
mongodb
nginx
_postgresdb
_python
_rabbitmq
redis
sphinx
supervisor
$

问题原因与解决方法

出现这个差异的核心原因是:Unix sort命令的排序规则受当前系统的LC_COLLATE(排序规则)环境变量影响。默认的系统locale(如en_US.UTF-8)会将下划线归类为符号,排序优先级低于字母;而Vim使用的是纯ASCII码排序规则,下划线的ASCII码(95)小于所有小写字母的ASCII码(97-122),所以会排在字母开头的文件名之前。

要让sort命令实现Vim风格的排序,只需临时将LC_COLLATE设置为C(强制使用ASCII排序规则),执行命令:

LC_COLLATE=C ls -1 . | sort

执行后就能得到符合预期的排序结果。

内容的提问来源于stack exchange,提问作者user3313834

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 22:12:49