如何在 Bash 中考虑“_”进行排序?

问题描述 投票:0回答: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
$

我没有成功地用unix排序做到这一点:

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

即使有选项:

$ 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
$
bash sorting
1个回答
0
投票

正如这篇文章所示,问题出在区域设置中。

使用 POSIX C 语言环境来获得您期望的结果。

$ cat tmp/filelist.txt  | LC_COLLATE=C /usr/bin/sort
_dns
_postgresdb
_python
_rabbitmq
linux
mariadb
minio
mongodb
nginx
redis
sphinx
supervisor
© www.soinside.com 2019 - 2024. All rights reserved.