【问题标题】:How can I increment a numerical part of a string between two characters using sed or awk or grep?如何使用 sed 或 awk 或 grep 在两个字符之间增加字符串的数字部分?
【发布时间】:2018-01-19 17:57:15
【问题描述】:

我有一个类似 X1.7_RC02.20170811110948 的字符串,我只需要增加 RC 和下一点之间的数字,例如:

原字符串:

X1.7_RC02.20170811110948

递增字符串:

X1.7_RC03.20170811110948

我怎样才能增加 1(或更多这个值)?

【问题讨论】:

标签: bash awk sed grep cat


【解决方案1】:

GNUsed

sed -r 's/(.*)(RC0?)([1-9]+)(\..*)/echo "\1\2$((\3+1))\4"/e' <<<X1.7_RC02.20170811110948

【讨论】:

    【解决方案2】:

    使用 GNU awk 将第三个参数匹配():

    $ awk 'match($0,/(.*RC)([^.]+)(.*)/,a){$0=sprintf("%s%02d%s",a[1],a[2]+1,a[3])} 1' file
    X1.7_RC03.20170811110948
    

    【讨论】:

      【解决方案3】:

      awk解决方案:

      初始字符串:

      s="X1.7_RC02.20170811110948"
      

      awk 'BEGIN{ FS=OFS="_RC"}{ n=substr($2,1,2); print $1,sprintf("%02.f",n+1) substr($2,3)}' <<< $s
      

      输出:

      X1.7_RC03.20170811110948
      

      【讨论】:

        【解决方案4】:

        考虑到您的数据与所示示例相同,然后尝试使用 awk 一次,如果这对您有帮助,请告诉我。

        awk '{val=$0;gsub(/.*RC|\..*/,"",val);val=sprintf("%02d",++val);sub(/RC[0-2]+/,"RC"val);print}'  Input_file
        

        或者,如果你有一个字符串,那么你可以打印它的值并可以在上面的命令中运行,例如:

        echo "$var" | awk '{val=$0;gsub(/.*RC|\..*/,"",val);val=sprintf("%02d",++val);sub(/RC[0-2]+/,"RC"val);print}' 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-15
          • 1970-01-01
          相关资源
          最近更新 更多