unix 使“ls”命令将“a”排序在“B”之前(相对于a->b->A->B)

z6psavjg  于 2022-11-04  发布在  Unix
关注(0)|答案(6)|浏览(194)

我正在尝试找到一种方法,以不区分大小写的方式打印ls命令的结果。
当前ls命令的结果为:

Apple
Boy
Chart
Dock
apples
boys
charts
docks

我想要的是:

Apple
apples
Boy
boys
Chart
charts
Dock
docks

这可能吗?

2w3rbyxf

2w3rbyxf1#

ls(至少如果你使用的是GNU coreutils版本; ls --version以检查)是否根据当前区域设置对文件名进行排序。
可用的语言环境设置因系统而异(列表为locale -a),但在我的系统上:

LC_COLLATE=en_US.utf8 ls

将包含aA的名称排在bB之前--尽管它可能不是 * 完全 * 按照您要查找的顺序。
即使当ls在多个列中列出文件时,这也是有效的,而sort -f很难做到这一点。
(我特意将$LC_COLLATE设置为C,以便按ASCII顺序进行区分区域设置的排序。)

0ejtzxu1

0ejtzxu12#

只需将结果通过管道传输到sort -f

46scxncf

46scxncf3#

作为[基思Thompson]回答的后续,我在Linux系统上进行了测试,LC_COLLATE=C对我不起作用,但LC_COLLATE=“en_US.UTF-8”起作用了。

export LANG=en_US.UTF-8
export LC_COLLATE="en_US.UTF-8"

这在OS X上不起作用。

yduiuuwa

yduiuuwa4#


# alias ll='(LC_COLLATE=en_US.utf8 && export LC_COLLATE && shopt -s nocaseglob && /bin/ls -alF --color=auto )'

# ll
deyfvvtc

deyfvvtc5#

ls --格式=单列|分类

7gyucuyw

7gyucuyw6#

添加到.profile:

alias llg='ls -ltr | grep -i'

则可以使用以下命令:

llg "week"

相关问题