我的项目有文件web / .htaccess
在某处,每个都有一行像
SetEnv BUILD_ID 1443.303.0001016
我通常使用以下命令更新这些数字字段(在cron脚本中)
grep "^SetEnv BUILD_ID " .htaccess && sed -i.bak -r 's/^(SetEnv BUILD_ID )([0-9]+)\.([0-9]+)\.(0*)([0-9]+)(.*)/printf "\1"$(date +%y%U.%j.)"%05d"$((\5+1))\6/ge' .htaccess
如您所见,前两个仅来自时间戳: yyWeekOfYear.DayOfYear.0001016
问 上面的 sed 正确设置了字段1和2,但字段3填充了五个零,如下所示:
SetEnv BUILD_ID 1444.307.000001017
如何使用现代 awk / gawk增加此字段3并在文件中就地更新整行,这样字段3将具有正好7位数,用零填充?假设我的项目都不会有超过10 ^ 7的次要版本号。
或者这可以仅使用日期和 bash 来完成?
部分类似于Perl / Awk / Sed - Find and Replace Number & auto-increment和 Add leading zeroes to awk variable
答案 0 :(得分:2)
这应该做你想要的,全部用awk:
awk '/SetEnv BUILD_ID/{split($3,a,".")
$3=sprintf("%s.%07d",strftime("%y%U.%j",systime()),+a[3]+1)}
1' .htaccess >tmp && mv tmp .htaccess
一衬垫:
awk '/SetEnv BUILD_ID/{split($3,a,".");$3=sprintf("%s.%07d",strftime("%y%U.%j",systime()),+a[3]+1)}1' .htaccess >tmp && mv tmp .htaccess
.
1
打印所有行。