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