代码之家  ›  专栏  ›  技术社区  ›  Ricardo Marimon

对debian版本号进行排序的Shell脚本(第5.4.3-2行)

  •  2
  • Ricardo Marimon  · 技术社区  · 15 年前

    我有一个文本文件,其中的条目代表版本和版本号的构建标签,格式与debian软件包相同,如下所示:

    nimbox-apexer_1.0.0-12
    nimbox-apexer_1.1.0-2
    nimbox-apexer_1.1.0-1
    nimbox-apexer_1.0.0-13 
    

    使用shell脚本,我需要按“版本构建”对上面的列表进行排序,并获得最后一行,在上面的示例中是 nimbox-apexer_1.1.0-2 .

    5 回复  |  直到 14 年前
        1
  •  3
  •   polemon    15 年前

    通过以下功能获得最新版本:

    cat file.txt | sort -V | tail -n1
    

    现在,将其捕获到一个变量中:

    BUILD=$(cat file.txt | sort -V | tail -n1)
    
        2
  •  1
  •   ghostdog74    15 年前
    sort -n -t "_" -k2.3 file | tail -1
    
        3
  •  1
  •   sra Jon    14 年前
    cat file.txt | cut -d_ -f 2 | sed "s/-/./g" | sort -n -t . -k 1,2n -k 2,2n -k 3,3n  -k 4,3n
    

    2n,3n是被认为与该字段相关的字符数。如果你使用了非常大的版本号,增加它们。。。

        4
  •  0
  •   Dennis Williamson    15 年前

    与GNU sort :

    sort --version-sort file | tail -n -1
    

    GNU tail 不喜欢 tail -1 .

        5
  •  0
  •   Ricardo Marimon    15 年前

    我还没有找到一个简单的方法来做到这一点。我一直在研究对ip地址进行排序的代码,这与我的问题类似,并试图将我的情况改为那个问题。这就是我想到的。请告诉我有一个更简单更好的方法!!!

    sed 's/^[^0-9]*\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)-\([0-9]*\)/\1.\2.\3.\4 &/' list.txt | \
      sort -t . -n -k 1,1 -k 2,2 -k 3,3 -k 4,4 | \
      sed 's/^[^ ]* \(.*\)/\1/' | \
      tail -n 1
    

    从这些数据开始:

    nimbox-apexer_11.9.0-2
    nimbox-apexer_1.10.0-9
    nimbox-apexer_1.9.0-1
    nimbox-apexer_1.0.0-12
    nimbox-apexer_1.1.0-2
    nimbox-apexer_1.1.0-1
    nimbox-apexer_1.0.0-13
    

    第一个 sed 将我的问题转化为排序IPs问题,保留原始行以在末尾反转更改:

    11.9.0.2 nimbox-apexer_11.9.0-2
    1.10.0.9 nimbox-apexer_1.10.0-9
    1.9.0.1 nimbox-apexer_1.9.0-1
    1.0.0.12 nimbox-apexer_1.0.0-12
    1.1.0.2 nimbox-apexer_1.1.0-2
    1.1.0.1 nimbox-apexer_1.1.0-1
    1.0.0.13 nimbox-apexer_1.0.0-13 
    

    这个 sort 使用前四个代表市长的数字命令行。少数的释放建筑

    1.0.0.12 nimbox-apexer_1.0.0-12
    1.0.0.13 nimbox-apexer_1.0.0-13 
    1.1.0.1 nimbox-apexer_1.1.0-1
    1.1.0.2 nimbox-apexer_1.1.0-2
    1.9.0.1 nimbox-apexer_1.9.0-1
    1.10.0.9 nimbox-apexer_1.10.0-9
    11.9.0.2 nimbox-apexer_11.9.0-2
    

    最后 塞德 消除用于排序的数据

    nimbox-apexer_1.0.0-12
    nimbox-apexer_1.0.0-13 
    nimbox-apexer_1.1.0-1
    nimbox-apexer_1.1.0-2
    nimbox-apexer_1.9.0-1
    nimbox-apexer_1.10.0-9
    nimbox-apexer_11.9.0-2
    

    最后 tail 获取我需要的最后一行。

    推荐文章