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.0
が 1.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