给出一个包含以下内容的文件:
foo: 8.3.1
bar: 803001
我需要一个bash脚本来读取此文件仅增加最后一位数字,并将第二行的最后三位数视为xyx中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
我可以在2秒内在java中执行此操作,但我需要在shell脚本中执行此操作,否则我将面临构建团队无休止的嘲弄。
如果没有一些粗略的字符串拆分,任何光滑的sep
命令都将是一个很大的帮助!
答案 0 :(得分:7)
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
根据文件中的其他内容,您可能需要在声明之前使用条件限定替换。
答案 1 :(得分:4)
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
答案 2 :(得分:4)
Bikeshedding并略微打高尔夫球。增加行尾数字形成的数字:
perl -i -pe '/^(foo|bar):/ && s/\d+$/$&+1/e;' input