文字ソート順序をカスタマイズする方法は?

文字ソート順序をカスタマイズする方法は?

Linuxで文字順序/文字優先順位を設定するには?

現在、次のようにコマンドを使用してこれをテストしています。

ls -al --group-directories-first

次のようなファイルがあるとしましょう。

a
b
c
A
B
C
.a
.b
.c
.A
.B
.C

lsのデフォルト出力は次のとおりです。

-rw-r--r--  1 username  username     0 Jan 11 07:18 a
-rw-r--r--  1 username  username     0 Jan 11 07:55 .a
-rw-r--r--  1 username  username     0 Jan 11 07:18 A
-rw-r--r--  1 username  username     0 Jan 11 07:55 .A
-rw-r--r--  1 username  username     0 Jan 11 07:18 b
-rw-r--r--  1 username  username     0 Jan 11 07:55 .b
-rw-r--r--  1 username  username     0 Jan 11 07:18 B
-rw-r--r--  1 username  username     0 Jan 11 07:55 .B
-rw-r--r--  1 username  username     0 Jan 11 07:18 c
-rw-r--r--  1 username  username     0 Jan 11 07:55 .c
-rw-r--r--  1 username  username     0 Jan 11 07:18 C
-rw-r--r--  1 username  username     0 Jan 11 07:55 .C

私が望む出力順序:

-rw-r--r--  1 username  username     0 Jan 11 07:55 .A
-rw-r--r--  1 username  username     0 Jan 11 07:55 .a
-rw-r--r--  1 username  username     0 Jan 11 07:55 .B
-rw-r--r--  1 username  username     0 Jan 11 07:55 .b
-rw-r--r--  1 username  username     0 Jan 11 07:55 .C
-rw-r--r--  1 username  username     0 Jan 11 07:55 .c
-rw-r--r--  1 username  username     0 Jan 11 07:18 A
-rw-r--r--  1 username  username     0 Jan 11 07:18 a
-rw-r--r--  1 username  username     0 Jan 11 07:18 B
-rw-r--r--  1 username  username     0 Jan 11 07:18 b
-rw-r--r--  1 username  username     0 Jan 11 07:18 C
-rw-r--r--  1 username  username     0 Jan 11 07:18 c

私が試したこと.bashrc

export LC_ALL="C"               #Did not work
export LC_COLLATE="en_US.UTF-8" #Did not work
export LC_LANG="C"              #Did not work
export LC_COLLATE="C"           #Did not work

それでは、独自のカスタム文字順序/優先順位をどのように作成できますか?

ありがとう

答え1

sortこのコマンドが役に立ちそうです。

-t, --field-separator=SEP

スペース以外のスペースをスペースに変換する代わりに、SEPを使用してください。

-k, --key=POS1[,POS2]

POS1(開始点1)でキーを開始し、POS2(基本行の終わり)で終了します。

ls -lAr|sort -t . -k2
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:35 a
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:35 b
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:36 c
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:36 d
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:38 A
-rw-r--r-- 1 CRM CCRM 0 Jan 20 10:34 .a
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:36 .A
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:38 .b
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:36 .B
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:36 .C
-rw-r--r-- 1 CRM CCRM 0 Jan 20 09:36 .D

答え2

km_KHロケールは最初に小文字を使用し、次に大文字を使用しますが、要求されたものと同様に並べ替えられます。 km_KH ロケールは Centos 7 の標準インストールに含まれています。したがって、おそらくリポジトリの追加パッケージを介して他のディストリビューションで利用できるという合理的な推測です。

このエイリアス定義を .bashrc に入れることができます。

 $ alias l='LC_COLLATE=km_KH ls -lA'
 $ touch a b c A B C .a .b .c .A .B .C
 $ l
total 0
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 .a
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 .A
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 .b
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 .B
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 .c
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 .C
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 a
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 A
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 b
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 B
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 c
-rw-rw-r-- 1 g greg 0 2020-11-08 18:01 C

ドットファイルが最後に来ても、ar_SAロケールは要求されたソートの近くにソートされます。

-rw-rw-r-- 1 g greg 0 Nov  8 18:33 A
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 a
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 B
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 b
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 C
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 c
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 .A
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 .a
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 .B
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 .b
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 .C
-rw-rw-r-- 1 g greg 0 Nov  8 18:33 .c

以下は、インストールされている各ロケールが現在のディレクトリを並べ替える方法を確認する簡単なループです。

for a in $(locale -a);do echo $a;LC_COLLATE=$a ls -Al;done|&less

あるいは、次のような実用的なヒントを使用できます。 カスタムパターンを使用したソート

ここへの回答の並べ替えと組み合わせは興味深かったです。 http://superuser.com/questions/489275/how-to-do-custom-sorting-using-unix-sort

あるいは、弾丸を噛んで自分のロケールを定義することもできます。http://askubuntu.com/questions/653008/how-to-create-a-new-system-locale

関連情報