設定 shell 排序中的排序規則以不忽略特殊字符

設定 shell 排序中的排序規則以不忽略特殊字符

我正在尋找在 postgres 中排序的解決方案,但這似乎更多是排序問題,因此我提出了標準 Unix 排序命令的問題。

我有以下數據:

A_A1
A\A2
A_A2
A\A1

排序後我得到:

cat test.txt |sort

A_A1
A\A1
A_A2
A\A2

但我想要:

A_A1
A_A2
A\A1
A\A2

我也嘗試過LANG=C cat...但沒有成功。那麼哪種排序規則可以讓我不忽略特殊字元呢?

答案1

man sort

Set LC_ALL=C to get the traditional sort order that uses native byte values.

所以:

$ LC_ALL=C sort test.txt
A\A1
A\A2
A_A1
A_A2

所以 C 語言環境確實是按位元組值排序。


你需要做

$ cat test.txt | LC_ALL=C sort

如果您想像這樣透過管道傳輸它(但請始終嘗試直接使用檔案名稱(如果可用))。


影響此的主要環境變數是LC_COLLATE.如果LC_ALL設定了,它會優先於所有特定LC_值。如果 和 均未LC_ALL設置LC_COLLATE,則返回LANG。如果未設置,預設為 locale C

相關內容