我有一個具有以下格式的變數
bundle="chn-pro-X.Y-Z.el8.x86_64"
X,Y,Z 是具有任意位數的數字
例如:
1.0-2 # X=1 Y=0 Z=2
12.45-9874 # X=12 Y=45 Z=9874
如何獲取X.Y并將其存盤在另一個變數中?
編輯:
我的措辭不對,但我想存盤X.Y到新變數而不是個人X&Y中,我希望最終有一個version從X.Y以下位置獲取的變數bundle:
version="X.Y"
uj5u.com熱心網友回復:
我會使用awk:
bundle="chn-pro-12.45-9874.el8.x86_64"
echo "$bundle" | awk -F "[.-]" '{print $3,$4,$5}'
12 45 9874
現在,如果您想分配x, y, z使用read和處理替換:
read -r x y z < <(echo "$bundle" | awk -F "[.-]" '{print $3,$4,$5}')
echo "x=$x, y=$y, z=$z"
x=12, y=45, z=9874
如果您只想將 的值X.Y作為單個值,這對于 awk 仍然很有用:
bundle="chn-pro-12.45-9874.el8.x86_64"
echo "$bundle" | awk -F "[-]" '{print $3}'
12.45
然后,如果您想將其放入變數中:
x_y=$(echo "$bundle" | awk -F "[-]" '{print $3}')
echo "x_y=$x_y"
x_y=12.45
或者您可以cut在這種情況下使用來獲取第三個欄位:
echo "$bundle" | cut -d- -f3
12.45
uj5u.com熱心網友回復:
像那樣:
$ bundle="chn-pro-1.0-2.el8.x86_64"
$ X="$(echo "$bundle" | cut -d . -f1 | cut -d- -f3)"
$ Y="$(echo "$bundle" | cut -d . -f2 | cut -d- -f1)"
$ Z="$(echo "$bundle" | cut -d . -f2 | cut -d- -f2)"
$ echo "$X"
1
$ echo "$Y"
0
$ echo "$Z"
2
您可以合并X和Y成一個變數:
$ XY="$X.$Y"
$ echo $XY
1.0
uj5u.com熱心網友回復:
與bash:
bundle="chn-pro-X.Y-Z.el8.x86_64"
[[ "$bundle" =~ -.*-(.*)- ]] && echo "${BASH_REMATCH[1]}"
輸出:
XY
uj5u.com熱心網友回復:
使用正則運算式分隔數字:
numbers=$(echo $bundle | grep -Eo '([0-9] \.[0-9] \-[0-9] )' | sed 's/\./\t/g;s/\-/\t/g')
然后使用 awk 或 tr 或 cut 將它們分配給變數,無論你想要什么:
X=$(echo $numbers| awk '{print $1}')
Y=$(echo $numbers| awk '{print $2}')
Z=$(echo $numbers| awk '{print $3}')
編輯
要將 xy 存盤到單個版本變數中,您可以簡單地忽略 pervios 命令:
version=$(echo $bundle | grep -Eo '([0-9] \.[0-9] \-[0-9] )' | grep -Eo '([0-9] \.[0-9] )')
uj5u.com熱心網友回復:
鑒于此輸入:
$ bundle="chn-pro-12.45-9874.el8.x86_64"
使用 GNU 或 BSD sed -E:
$ foo=$(echo "$bundle" | sed -E 's/.*-([0-9] \.[0-9] )-[0-9].*/\1/')
$ echo "$foo"
12.45
或使用任何 sed:
$ foo=$(echo "$bundle" | sed 's/.*-\([0-9][0-9]*\.[0-9][0-9]*\)-[0-9].*/\1/')
$ echo "$foo"
12.45
uj5u.com熱心網友回復:
假設:
- 輸入字串將始終包含(至少)3 個連字符
- 所需的
version字串將始終位于輸入字串的第二個和第三個連字符之間 - 我們需要維護輸入字串(即,不要破壞/覆寫包含輸入字串的變數)
echo/sed/grep/awk/sed我們可以通過使用一些引數擴展來消除子行程呼叫(必要的) :
$ bundle="chn-pro-X.Y-Z.el8.x86_64"
$ temp="${bundle#*-}" # strip off 1st hyphen delimited string
$ echo "${temp}"
pro-X.Y-Z.el8.x86_64
$ temp="${temp#*-}" # strip off 2nd hyphen delimited string
$ echo "${temp}"
X.Y-Z.el8.x86_64
$ version="${temp%%-*}" # save 3rd hyphen delimited string (aka our version)
$ echo "${version}"
X.Y
注意:我們可以通過用 替換所有出現的變數來消除變數temp,因為 在第三個引數擴展發生之前不包含我們想要的內容,例如:tempversionversion
$ bundle="chn-pro-X.Y-Z.el8.x86_64"
$ version="${bundle#*-}"
$ version="${version#*-}"
$ version="${version%%-*}"
$ echo "${version}"
X.Y
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/419837.html
標籤:
上一篇:Kubernetes組件查詢
