シェルでセマンティックバージョンをソートする Go のコードスニペットのメモ。
たまにシェルでセマンティックバージョンをソートすることがあるので Go でのコードスニペットをメモしておく。
コードはこんな感じ。エラー処理は適当。
package main import ( "bufio" "fmt" "os" "sort" "github.com/Masterminds/semver" ) func main() { var a []string scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { s := scanner.Text() a = append(a, s) } if err := scanner.Err(); err != nil { panic(err) } if len(a) == 0 { return } versions := make([]*semver.Version, len(a)) for i, s := range a{ v, err := semver.NewVersion(s) if err != nil { panic(err) } versions[i] = v } sort.Sort(semver.Collection(versions)) for _, v := range versions { fmt.Println(v) } }
こんな感じで使う。
$ cat versions.txt 1.0.0 1.0.0-beta.1 1.0.0-rc.1 1.0.0-alpha.1 $ cat versions.txt | go run main.go 1.0.0-alpha.1 1.0.0-beta.1 1.0.0-rc.1 1.0.0