我需要以特定格式塑造版本。
例如:
V1=1.0.1
V2=4.0.1
V3=3.1.101
...
需要填0,如下所示:
V1=001.000.001.000
V2=004.000.001.000
V3=003.001.101.000
...
关于我如何做到这一点的任何想法?
编辑:
我成功使用printf如下:
printf "%03d.%03d.%03d.000\n" $(echo $V3 | grep -o '[^-]*$' | cut -d. -f1) $(echo $V3 | grep -o '[^-]*$' | cut -d. -f2) $(echo $V3 | grep -o '[^-]*$' | cut -d. -f3)
输出:
003.001.101.000
有更好的建议吗?
答案 0 :(得分:1)
您可以尝试awk
:
awk -F'[=.]' '{ # Set field delimiter to = and .
split($0, a, FS, seps) # Get all elements and separator into an array
for(i=1;i<=5;i++) { # Loop though all fields
if(i>1)
a[i]=sprintf("%03d",$i) # Update the version number with 3 digits
printf "%s%s", a[i], seps[i]} # Print the field
print "" # print a newline
}' file
如果版本采用bash变量,则可以使用更简单的awk
单行:
V3="3.1.101"; awk -F. '{for(i=1;i<5;i++){$i=sprintf("%03d",$i)}}1' OFS='.' <<<$V3
答案 1 :(得分:1)
让我们尝试sed
获取一个文本文件,列出版本作为输入,命名为versions.txt。为简单起见,我将指示分开:
# Add '00' before each sub-version number
sed -i -r 's/([=\.])([0-9])/\100\2/g' versions.txt
# Remove '00' if sub-version number had 3 digits
sed -i -r 's/([=\.])00([0-9]{3})/\1\2/g' versions.txt
# Remove '0' if sub-version number had 2 digits
sed -i -r 's/([=\.])00([0-9]{2})/\10\2/g' versions.txt
# Add the final '.000' after each version
sed -i -r 's/([0-9]{3}\.[0-9]{3}\.[0-9]{3})/\1\.000/g' versions.txt
答案 2 :(得分:1)
另一种sed方法:
sed -r 's/\b([0-9]{1})(\.|$)/00\1\2/g;s/\b([0-9]{2})(\.|$)/0\1\2/g;s/(([0-9]{3}\.|$){3})/\1.000/g'