我有一個字串 $sea = xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1.tgz
我只想提取 DMJK.UK.1.0-32133-Z-1 並且搜尋字串將為 DMJK
我嘗試過像
echo $sea
y=${sea/\/*\//};
echo ${y/.*/};
但它不起作用,請幫忙
答案1
你想如何選擇刪除什麼和保留什麼還不清楚。這是獲得您要求的結果的多種方法之一:
$ sea=xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1.tgz
$ sea2=${sea/*[[:lower:]]-/}; echo ${sea2%.*}
DMJK.UK.1.0-32133-Z-1
DMJK
或者,這包括以結尾開頭和結尾的部分.tgz
:
$ sea2=${sea/*DMJK/DMJK}; echo ${sea2%.tgz}
DMJK.UK.1.0-32133-Z-1
即使.tgz
不存在,同樣的方法也有效:
$ sea=xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1
$ sea2=${sea/*DMJK/DMJK}; echo ${sea2%.tgz}
DMJK.UK.1.0-32133-Z-1
答案2
您如何確定要提取哪些字元?如果字元總是出現在字串中的特定位置,例如,如果它是固定長度的字串或您需要的字元是點和3 個字元擴展名之前的最後21 個字符,則可以在Bash 腳本中使用以下其中一項:
sea="xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1.tgz"
echo $sea
# If characters are always in positions 33 to 50
y=${sea:33:21}
echo $y
# If y always start 5 positions from the end and goes back 21 characters
# For negative numbers you need to put a space between the colon and the
# number
#
# Get the last 25 characters in the string
y=${sea: -25}
# Now discard the last 4, which are the dot and 3 character extension
y=${y:0:21}
echo $y
答案3
取決於您的變數在其他情況下的外觀。
它可以很簡單:
echo $sea | cut -d '-' -f 7- | cut -d . -f -4
或者
echo $sea | sed 's#.*\(DMJK.*\).tgz#\1#g'