In the manual for coreutils,
10.1.4 Details about version sort,
Version sorting handles the fact that file names frequently include indices or version numbers. Standard sorting usually does not produce the order that one expects because comparisons are made on a character-by-character basis. Version sorting is especially useful when browsing directories that contain many fi les with indices/version numbers in their names:
$ ls -1 $ ls -1v abc.zml-1.gz abc.zml-1.gz abc.zml-12.gz abc.zml-2.gz abc.zml-2.gz abc.zml-12.gz
Version-sorted strings are compared such that if
ver2are version numbers and prefix and suffix (suffix matching the regular expression
‘(\.[A-Za-z~][A-Za-z0-9~]*)*’) are strings then
ver2implies that the name composed of
prefix ver1 suffixsorts before
prefix ver2 suffix.
Note also that leading zeros of numeric parts are ignored:
$ ls -1 $ ls -1v abc-1.007.tgz abc-1.01a.tgz abc-1.012b.tgz abc-1.007.tgz abc-1.01a.tgz abc-1.012b.tgz
This functionality is implemented using gnulib’s
filevercmpfunction, which has some caveats worth noting.
LC_COLLATEis ignored, which means
sort -Vwill sort non-numeric prefixes as if the
LC_COLLATElocale category was set to
• Some suffixes will not be matched by the regular expression mentioned above. Consequently these examples may not sort as you expect:
abc-184.108.40.206.7z abc-220.127.116.11z abc-18.104.22.168.x86_64.rpm abc-1.2.3.x86_64.rpm
- Given a filename, what are the definitions of a prefix, version number, and suffix?
For a suffix, in the regular expression
- what does
‘part of the regular expression?
Is the syntax of regular expressions introduced somewhere?
- what does
In the three examples, what are the prefixes, version numbers and suffixes of the filenames?
In the last example, the one in the last caveat, why are the filenames sorted that way by version sorting?