Por que esse tipo ignora o prefixo do caractere +/-?

1

Estou tentando classificar um patch para destacar uma alteração específica:

$ 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

A saída é:

-    { "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 },

Eu esperava que a classificação fosse classificada pelo primeiro caractere +/-.

Posso confirmar que os caracteres são consistentemente 0x2b e 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 fornece o mesmo resultado. -d diz alfanumérico e +/- não é alfanumérico. sort -n também não funciona (eu não esperava).

Estou usando o Linux / Unix por mais tempo do que gostaria de admitir, e nunca percebi isso antes!

... Isso é esperado? Existe outra maneira de usar sort ? (Eu sei que também pode ser feito em um forro de Perl ...)

    
por rrauenza 30.11.2016 / 00:04

1 resposta

2

Como mencionado em Por que a classificação ls ignora os caracteres não alfanuméricos? caracteres? , o agrupamento padrão é UTF8 e o UTF8 considera +/- equivalente.

Ao definir LC_COLLATE=C para a classificação, você pode obter a ordem de classificação ascii:

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
    
por 30.11.2016 / 00:07

Tags