次のリストを並べ替え、最新バージョンが一番下または一番上に表示されるようにするには、シェルスクリプトを使用する必要があります。シェルツールのみを使用してこれを行うにはどうすればよいですか?
release-5.0.0.rc1
release-5.0.0.rc2
release-5.0.0
release-5.0.1
release-5.0.10
release-5.0.11
release-5.0.13
release-5.0.14
release-5.0.15
release-5.0.16
release-5.0.17
release-5.0.18
release-5.0.19
release-5.0.2
release-5.0.20
release-5.0.21
release-5.0.22
release-5.0.23
release-5.0.24
release-5.0.25
release-5.0.26
release-5.0.27
release-5.0.28
release-5.0.29
release-5.0.3
ベストアンサー1
GNUソートは-V
主に次のリストを処理できます(詳細):
-V, --version-sort
natural sort of (version) numbers within text
$ cat vers
release-5.0.19
release-5.0.19~pre1
release-5.0.19-bigbugfix
release-5.0.2
release-5.0.20
$ sort -V vers
release-5.0.2
release-5.0.19~pre1
release-5.0.19
release-5.0.19-bigbugfix
release-5.0.20
ただし、これらの.rc*
バージョンはおそらくソートする必要があるため、少し問題になる可能性があります。今後これは非rcバージョン(両方の場合)です。いくつかのバージョン管理システム(Debianなど)は、プレリリース版~
を表示するためにチルダ()で始まるサフィックスを使用し、サフィックスのないバージョンの前にソートされ、他のサフィックスがあるバージョンの前にソートされます。明らかに、これはsort
上記のように少なくとも私のシステムでサポートされています(sort (GNU coreutils) 8.23
)。
リストの例をソートするには、次のコマンドを使用できます。
perl -pe 's/\.(?=rc)/~/' < versions.txt | sort -V | perl -pe 's/~/./' > versions-sorted.txt