このソートが+/-文字プレフィックスを無視するのはなぜですか?

このソートが+/-文字プレフィックスを無視するのはなぜですか?

特定の変更を強調するためにパッチを並べ替えたいと思います。

$ curl -s https://lists.fedorahosted.org/archives/list/[email protected]/message/ZN6VMFN65JWV7NMG2XEHPUI2AGSLRNGW/attachment/2/0001-LDAP-Change-the-default-rfc2307-autofs-attribute-map.patch | \
grep '^[+-] *{ "' | sort

出力は次のとおりです

-    { "ldap_autofs_entry_object_class", "automount", SYSDB_AUTOFS_ENTRY_OC, NULL },
+    { "ldap_autofs_entry_object_class", "nisObject", SYSDB_AUTOFS_ENTRY_OC, NULL },
-    { "ldap_autofs_entry_value", "automountInformation", SYSDB_AUTOFS_ENTRY_VALUE, NULL },
+    { "ldap_autofs_entry_value", "nisMapEntry", SYSDB_AUTOFS_ENTRY_VALUE, NULL },
+    { "ldap_autofs_map_name", "nisMapName", SYSDB_AUTOFS_MAP_NAME, NULL },
-    { "ldap_autofs_map_name", "ou", SYSDB_AUTOFS_MAP_NAME, NULL },
-    { "ldap_autofs_map_object_class", "automountMap", SYSDB_AUTOFS_MAP_OC, NULL },
+    { "ldap_autofs_map_object_class", "nisMap", SYSDB_AUTOFS_MAP_OC, NULL },

ソートを最初の文字+/-でソートしたいと思いました。

文字が0x2bと0x2dで一致することを確認できます。

$ curl -s https://lists.fedorahosted.org/archives/list/[email protected]/message/ZN6VMFN65JWV7NMG2XEHPUI2AGSLRNGW/attachment/2/0001-LDAP-Change-the-default-rfc2307-autofs-attribute-map.patch | grep '^[+-] *{ "' | cut -c1 | hexdump -C

00000000  2d 0a 2d 0a 2b 0a 2b 0a  2d 0a 2b 0a 2d 0a 2b 0a  |-.-.+.+.-.+.-.+.|
00000010

sort -d同じ結果を提供します。 -d+/- は英数字を意味しますが、+/- は英数字を意味しません。 sort -n動作しません(動作することを期待していません。)

私は認めたいものより長い間Linux / Unixを使用してきましたが、以前はこれを見たことがありません!

...予想されたことですか?それを使用する別の方法がありますかsort? (Perl onelinerでも可能であることを知っています...)

ベストアンサー1

で述べたようにlsソートが英数字以外の文字を無視するのはなぜですか?、デフォルトの照合は UTF8 で、UTF8 は +/- 等価とみなされます。

ソートを設定すると、LC_COLLATE=CASCIIソート順序を取得できます。

curl -s https://lists.fedorahosted.org/archives/list/[email protected]/message/ZN6VMFN65JWV7NMG2XEHPUI2AGSLRNGW/attachment/2/0001-LDAP-Change-the-default-rfc2307-autofs-attribute-map.patch | \
grep '^[+-] *{ "' | LC_COLLATE=C sort

おすすめ記事