【问题标题】:Increment version number, but keep zeroes增加版本号,但保持零
【发布时间】:2021-01-07 09:43:17
【问题描述】:

我正在尝试将版本号增加 0.10,但也保持跟随零。这是我所拥有的:

printf '%s\n' '1.00' '1.50' '1.90' | perl -i -pe "s/\K.+/$&+0.1/e"

这会返回:

1.1
1.6
2

但我希望它返回:

1.10
1.60
2.00

关于如何实现这一点的任何提示?

【问题讨论】:

标签: bash perl


【解决方案1】:

当人们发现正则表达式有多强大时,他们通常会开始在任何地方使用它们——即使它们不是最合适的工具。

这里不需要正则表达式。你要的是sprintf()

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

my @vers = qw(1.00 1.50 1.90);

for (@vers) {
  my $newver = sprintf '%.2f', $_ + .1;

  say "$_ -> $newver";
}

输出:

1.00 -> 1.10
1.50 -> 1.60
1.90 -> 2.00

【讨论】:

    【解决方案2】:

    首先,

    s/\K.+/$&+0.1/e
    

    是一种非常奇怪的写作方式

    $_ += 0.1 if length
    

    它显然可以缩短为

    $_ += 0.1
    

    解决方案:

    替换-p

    s/\K.+/$&+0.1/e
    

    -n

    printf "%.2f", $_ + 0.1
    

    【讨论】:

      【解决方案3】:

      使用 awk:

      $ printf '%s\n' '1.00' '1.50' '1.90' |
        awk '{printf "%.2f\n",$0+0.1}'
      

      输出:

      1.10
      1.60
      2.00
      

      【讨论】:

        【解决方案4】:

        你也可以把它交给 zsh。例如,

        export v
        for v in 1.00 1.50 1.90
        do
            zsh -c 'printf %.2f $((v+0.1))'
        done
        

        分别,如果您需要在变量中捕获递增的版本,

            new_version=$(zsh -c 'printf %.2f $((v+0.1))')
        

        当然,如果你走得这么远,你可以考虑用 zsh 而不是 bash 编写整个脚本。

        【讨论】:

          【解决方案5】:

          普通的 POSIX shell 函数:

          #!/usr/bin/env sh
          
          newver() {
            version=$1
            major=${version%.*}
            minor=$((${version#*.} + 10))
            if [ $minor -gt 99 ]; then
              minor=0
              major=$((major + 1))
            fi
            printf '%d.%02d\n' $((major)) $((minor))
          }
          
          for v in '1.00' '1.50' '1.90'; do
            newver "$v"
          done
          

          输出:

          1.10
          1.60
          2.00
          

          或者使用bc的单线:

          for v in 1.00 1.50 1.90;do echo scale=2\;$v+.1|bc;done
          

          【讨论】:

          • 在 1.90 -> 2.00 的情况下,输出与预期的不太一样
          • @MarkoJ 现在可以根据需要输出
          猜你喜欢
          • 2015-07-22
          • 1970-01-01
          • 2021-10-14
          • 2017-01-29
          • 2014-02-21
          • 2014-04-04
          • 1970-01-01
          • 1970-01-01
          • 2018-03-14
          相关资源
          最近更新 更多