带零前缀的bash脚本末尾递增数

带零前缀的bash脚本末尾递增数,bash,awk,scripting,Bash,Awk,Scripting,给定一个包含以下内容的文件: foo: 8.3.1 bar: 803001 我需要一个BASH脚本来读取这个文件,只增加最后一个数字,并将第二行的最后三个数字作为X.Y.x中的z空间增长到三个数字(并用新数据覆盖原始文件:)。 投入1: foo: 8.3.1 bar: 803001 产出1: foo: 8.3.2 bar: 803002 投入2: foo: 8.3.9 bar: 803009 产出2: foo: 8.3.10 bar: 803010 投入3: foo: 8.3.

给定一个包含以下内容的文件:

foo: 8.3.1
bar: 803001
我需要一个BASH脚本来读取这个文件,只增加最后一个数字,并将第二行的最后三个数字作为X.Y.x中的z空间增长到三个数字(并用新数据覆盖原始文件:

)。 投入1:

foo: 8.3.1
bar: 803001
产出1:

 foo: 8.3.2
 bar: 803002
投入2:

foo: 8.3.9
bar: 803009
产出2:

 foo: 8.3.10
 bar: 803010
投入3:

foo: 8.3.199
bar: 803199
产出3:

 foo: 8.3.200
 bar: 803200
我可以用java在2秒钟内完成这项工作,但我需要在shell脚本中完成,否则我将面临构建团队无休止的嘲笑


缺少一些粗糙的字符串拆分任何光滑的
sep
命令都将是一个很大的帮助!

awk
来营救

 awk -v d='.' '{n=split($2,v,d); 
                if (n>1) $2=v[1] d v[2] d v[3]+1; 
                else $2++}1' file

根据文件中的其他内容,您可能需要在声明之前使用条件对替换内容进行限定。

awk
拯救

 awk -v d='.' '{n=split($2,v,d); 
                if (n>1) $2=v[1] d v[2] d v[3]+1; 
                else $2++}1' file
while read key val _; do
  val_left="${val%.*}" val_right="${val##*.}"
  printf '%s ' "$key"
  [[ $val = *.* ]] && printf '%s.' "$val_left"
  printf '%d\n' $(( 1+val_right ))
done

根据文件中的其他内容,您可能需要在声明之前使用条件来限定替换内容。

骑自行车和打高尔夫球。增加行尾数字形成的数字:

while read key val _; do
  val_left="${val%.*}" val_right="${val##*.}"
  printf '%s ' "$key"
  [[ $val = *.* ]] && printf '%s.' "$val_left"
  printf '%d\n' $(( 1+val_right ))
done
perl -i -pe '/^(foo|bar):/ && s/\d+$/$&+1/e;' input 

骑自行车和打高尔夫球。增加行尾数字形成的数字:

perl -i -pe '/^(foo|bar):/ && s/\d+$/$&+1/e;' input 

固定打字感谢-我需要的是第一行的第三个数字要递增,第二行包含第一行的数字,不带小数点,并且考虑到第三个数字可以是000到999:/固定打字感谢-我需要的是第一行的第三个数字要递增,第二行包含第一行的数字不带小数点且考虑到第三位数字的数字可以是000到999:/