全力で怠けたい

怠けるために全力を尽くしたいブログ。

sort コマンドでバージョン番号をソートするメモ。

sort コマンドでバージョン番号をソートするやり方のメモ。

このメモは Ubuntu 20.04.2 LTS の sort コマンドと macOS の sort コマンドを使ってる。

Ubuntu と sort コマンドのバージョン。

$ cat /etc/os-release | grep -w VERSION
VERSION="20.04.2 LTS (Focal Fossa)"

$ sort --version
sort (GNU coreutils) 8.30
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Mike Haertel and Paul Eggert.

macOS と sort コマンドのバージョン。

$ sw_vers | grep Product
ProductName:    macOS
ProductVersion: 11.2.3

$ sort --version
2.3-Apple (106)

sort コマンドでバージョン番号をソートする

バージョン番号がバラバラに入ってるデータをバージョン番号でソートすることがときどきある。 こんな感じのバージョン番号がファイルに入ってたら 1.0.0, 1.9.0, 1.10.0 の順にソートしたいけど、単純に sort コマンドでソートすると 1.1.0, 1.10.0, 1.9.0 みたいに 1.10.01.9.0 よりも前にきてしまう。

$ cat versions.txt
1.0.0
1.10.0
1.9.0

$ cat versions.txt | sort
1.0.0
1.10.0
1.9.0

解決策: -V, --version-sort オプションを指定する

sort コマンドは -V オプションか --version-sort オプションを指定すると入力データを自然なバージョン番号の順にソートする。らく。

$ cat versions.txt | sort --version-sort
1.0.0
1.9.0
1.10.0

sort コマンドはバージョン番号が rc とか alpha を含むときには無力

sort コマンドの -V オプションと --version-sort オプションはバージョン番号が rc とか alpha みたいなプレリリースのバージョンを含んでいるときはちゃんとソートできない。 バージョン番号が rc とか alpha みたいなプレリリースのバージョンを含むときは こっち

$ cat versions.txt
1.0.0
1.0.0-beta.1
1.0.0-rc.1
1.0.0-alpha.1

$ cat versions.txt | sort --version-sort
1.0.0
1.0.0-alpha.1
1.0.0-beta.1
1.0.0-rc.1

# こんな感じにソートしてほしい
# 1.0.0-alpha.1
# 1.0.0-beta.1
# 1.0.0-rc.1
# 1.0.0