如何获取`sort` shell命令来比较原始字节?

bksxznpy  于 2023-05-29  发布在  Shell
关注(0)|答案(1)|浏览(168)

posixxsort命令行实用程序将执行一些基于区域设置的奇特操作来比较给定的字符串。
我扫描了手册页,但似乎找不到让它使用原始字节值的方法。有没有办法让sort(我有GNU coreutils版本)像C中的qsort(array_of_my_strings, N, strcmp)一样运行?使用另一个工具然后sort的解决方案也很好。
为了演示,我目前得到:

printf "\xC3\xBC\n\x76\n" | sort
ü
v

因为德语元音变音ü似乎被比较为在v之前的u,尽管\xC3大于\x76
我想要的是

printf "\xC3\xBC\n\x76\n" | sort --raw-bytes-please
v
ü
o75abkj4

o75abkj41#

排序规则顺序和(多字节)字符类型受区域设置的影响。用于禁用多字节和区域设置感知行为的区域设置名称是C
因此:

LC_COLLATE=C LC_CTYPE=C sort

...将只设置字符类型和排序规则顺序(假设LC_ALL没有设置,在这种情况下,它们将被忽略)。
作为一个大锤子,你也可以用途:

LC_ALL=C sort

尽管具有副作用,例如将用于打印错误消息的语言&c更改为最初由sort的开发人员编写的字符串,而没有有效的转换表。

相关问题