我想知道 docker-compose 的版本號。格式因版本而異。
例如:運行 docker-compose --version
docker-compose version 1.29.2, build someId
Docker Compose version v2.12.2
我有單獨的 sed 陳述句來獲取版本號,但如果可能的話,我想將它們組合起來。
echo `docker-compose --version` | sed -nr 's|^docker-compose version (.*)(,.*)|\1|p'
echo `docker-compose --version` | sed -nr 's|^Docker compose version v(.*)|\1|p'
如果我或兩個正則運算式一起使用管道,則參考需要更改為 \1 或 \3 ,具體取決于它被捕獲的位置。
有沒有更好的方法使用 sed?
uj5u.com熱心網友回復:
您可以使用此單曲sed從有問題的兩行中獲取版本號:
sed -E 's/^[dD]ocker[- ][cC]ompose version v?([^,] ).*/\1/'
1.29.2
2.12.2
分解:
^: 開始[dD]ocker[- ][cC]ompose version: 匹配帶有混合大小寫字母和連字符/空格分隔符的起始字串v?: 匹配 1 個空格,后跟一個可選的v([^,] ): 匹配任何非逗號字符的 1 并在組 #1 中捕獲.*:匹配一切直到結束\1: 對捕獲組 #1 的反向參考
uj5u.com熱心網友回復:
Bash 具有內置的正則運算式支持([[ $string =~ $regex ]]將匹配組內容存盤在陣列中BASH_REMATCH),因此這里不需要sed。以下內容更詳細,但運行速度更快,因為不需要啟動任何外部可執行檔案:
dockerComposeVersion=$(docker-compose --version)
dcVersionRegex='[Dd]ocker[ -]compose version v?([^,] )'
if [[ $dockerComposeVersion =~ $dcVersionRegex ]]; then
echo "docker-compose version is ${BASH_REMATCH[1]}"
else
echo "Unable to get docker-compose version" >&2
fi
uj5u.com熱心網友回復:
您可以將兩個運算式合并為
echo `docker-compose --version` | sed -nr 's|^[dD]ocker[ -][cC]ompose version v?([^, ]*).*|\1|p'
詳情:
^- 字串的開始[dD]-d或Docker- 文字字串[ -]- 空格或連字符[cC]-c或Compose version- 固定字串v?- 一個可選v字符([^, ]*)- 第 1 組:除空格和逗號之外的零個或多個字符.*- 字串的其余部分。
uj5u.com熱心網友回復:
在帶有您顯示的示例的 GNUawk中,請嘗試以下awk代碼。match在 GNU 中使用帶有正則運算式的函式來awk獲取^([dD]ocker(-c| C)ompose version )v?(([0-9] \.){2}[0-9] ),?所需的值。如果找到任何匹配項,則將其存盤到命名陣列中arr并列印 arr 的第 1 和第 3 個元素。
awk '
match($0,/^([dD]ocker(-c| C)ompose version )v?(([0-9] \.){2}[0-9] ),?/,arr){
print arr[1] arr[3]
}
' Input_file
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/532838.html
標籤:正则表达式重击sed
上一篇:wget的單行bash腳本,重試
下一篇:在系統啟動時啟動本地節點服務器
