manpagez: man pages & more
info coreutils
Home | html | info | man

File: coreutils.info,  Node: Version sort punctuation,  Next: Punctuation vs letters,  Prev: Version sort is not the same as numeric sort,  Up: Version sort implementation

30.2.3 Version sort punctuation
-------------------------------

Punctuation is sorted by ASCII order (rule 2.B).

     $ touch 1.0.5_src.tar.gz 1.0_src.tar.gz
     $ ls -v -1
     1.0.5_src.tar.gz
     1.0_src.tar.gz

   Why is ‘1.0.5_src.tar.gz’ listed before ‘1.0_src.tar.gz’?

   Based on the version-sort ordering rules, the strings are broken down
into the following parts:

               1   vs  1               (rule 3, all digits)
               .   vs  .               (rule 2, all non-digits)
               0   vs  0               (rule 3)
               .   vs  _src.tar.gz     (rule 2)
               5   vs  empty string    (no more bytes in the file name)
     _src.tar.gz   vs  empty string

   The fourth parts (‘.’ and ‘_src.tar.gz’) are compared lexically by
ASCII order.  The ‘.’ (ASCII value 46) is less than ‘_’ (ASCII value 95)
– and should be listed before it.

   Hence, ‘1.0.5_src.tar.gz’ is listed first.

   If a different byte appears instead of the underscore (for example,
percent sign ‘%’ ASCII value 37, which is less than dot’s ASCII value of
46), that file will be listed first:

     $ touch   1.0.5_src.tar.gz     1.0%zzzzz.gz
     1.0%zzzzz.gz
     1.0.5_src.tar.gz

   The same reasoning applies to the following example, as ‘.’ with
ASCII value 46 is less than ‘/’ with ASCII value 47:

     $ cat input5
     3.0/
     3.0.5
     $ sort -V input5
     3.0.5
     3.0/

© manpagez.com 2000-2025
Individual documents may contain additional copyright information.