1
A
回答
2
如果你有bash的,我想你可以閱讀semver值到數組:
文件
10.4.3
11.5
124.4.5
12
你可以用空間填充重印他們
$ deSemverize(){ while read line; do IFS=. read -a fields<<<"$line"; printf "%4d %4d %4d\n" ${fields[@]}; done ; }
$ deSemversize < File
#=>
10 4 3
11 5 0
124 4 5
12 0 0
,自' ' < '0'
,你可以用詞法排序結果,就好像你先按MAJOR排序,然後按MINOR排序,然後按PATCH排序。然後,您可以再次打印結果Semver值:
$ semverize() { while read line; do read -a fields<<<"$line"; printf "%d.%d.%d\n" ${fields[@]}; done; }
$ deSemversize < File | sort | semverize
#=> 10.4.3
11.5.0
12.0.0
124.4.5
至於修改字段,可以在數值變量做標準的bash算術與(())
或$(())
,如:
echo "$((fields[0]+1))"
我將使用一個右對齊的面膜:
semverBump() {
local mask=$1
local dots_in_mask=${mask//[^.]/}
case "$dots_in_mask" in
"") mask=..$mask;;
".") mask=.$mask;;
esac
local maskarray
IFS=. read -a maskarray<<<"$mask"
while read line;
do IFS=. read -a fields<<<"$line";
for((i=0;i<3;i++))
do
((fields[$i]+=0))
[[ -z "${maskarray[$i]}" ]] && continue
if [[ "${maskarray[$i]}" =~ ^[+-].* ]]; then
((fields[$i]+=maskarray[$i]))
else
((fields[$i]=maskarray[$i]))
fi
done
printf "%d.%d.%d\n" ${fields[@]}
done ;
}
例如:
semverBump +2 < File #increase all minor by 2
semverBump 2 < File #set all minor to two
semverBump +1.-1.0 < File #increment major, decrement minor, set patch to zero
相關問題
- 1. 數據操作環境
- 2. 如何在Excel中顯示操作系統環境變量?
- 3. 如何確定操作系統是否爲C中的POSIX?
- 4. 閱讀環境變量是慢操作?
- 5. 在POSIX環境中,如何跟蹤由子進程訪問的文件?
- 6. 是* nix「posix」中程序的默認語言環境嗎?
- 7. Rails I18n語言環境的字符串中的操作
- 8. Web(asp.net)環境中的長時間運行操作(線程)
- 9. JEE環境中OSGI和JPA的互操作性
- 10. 使用malloc和POSIX文件操作
- 11. OSX是POSIX操作系統嗎?
- 12. 從循環操作中派生值
- 13. Postgres上的C和Posix語言環境有什麼區別?
- 14. 如何爲每個posix操作系統編譯GnuTLS
- 15. 境界:在操作
- 16. 如何將PHP編譯爲操作碼並在生產環境中運行?
- 17. 如何製作「安全環境」?
- 18. 路徑環境變量如何工作?
- 19. 此環境中不支持FIrebase Google auth操作
- 20. 如何在Ruby環境中使用HTML環境中的嵌套上升循環?
- 21. 跨操作系統的環境變量的有效字符
- 22. 如何操作顏色值?
- 23. MongoDB工作環境
- 24. 多線程環境下的ruby原子操作
- 25. 本地計算機上的默認操作系統環境
- 26. 控制器的操作依賴於環境
- 27. Git在多操作系統環境下的結局
- 28. Google TDD或測試環境上的操作
- 29. ngrx/reducex操作環境的最佳做法
- 30. 如何獲取Android.mk中的環境變量值?
[此問題](http://stackoverflow.com/q/4023830/258523)有關於排序的答案。所涉及的一些組件也可以重複用於遞增。 –