2012-01-07 59 views

回答

13
$ x=xyz.2.3.4.fc15.i686 
$ y=${x#*fc} 
$ z=${y%.*} 
$ echo $z 
15 
  • #左條
  • %右剝
3

有幾種方法做到這一點。如果原始字符串的長度是固定的,你可以使用cut,如:

echo YOUR_INPUT_STRING | cut -b n-z 

其中n是起點和z是結束位置。

如果點的數量是恆定的,請嘗試:

echo YOUR_INPUT_STRING | cut -d '.' -f 5 | cut -b 3- 

或者你也可以使用類似awk

echo YOUR_INPUT_STRING | awk '{print gensub(".*fc([0-9]+)\.i686","\\1","g",$0)}' 

HTH

4

隨着bashksh你不再需要外部工具:

bash-4.2$ x='xyz.2.3.4.fc15.i686' 
bash-4.2$ tempx="${x#*fc}" 
bash-4.2$ echo "${tempx%.i686}" 
15 

或者,如果你的位置,類似another answer但沒有外部公用事業希望:

bash-4.2$ x='xyz.2.3.4.fc15.i686' 
bash-4.2$ echo "${x:12:2}" 
15 

或者,如果你想它的正則表達式,類似於another answer但沒有外部工具(此時bash只):

使用 sed
bash-4.2$ x='xyz.2.3.4.fc15.i686' 
bash-4.2$ [[ "$x" =~ fc(.+)\.i686 ]] 
bash-4.2$ echo "${BASH_REMATCH[1]}" 
15 
0

方式一:

echo $x | sed 's/.*fc\([0-9]*\)\.i686/\1/' 
1

,可以用[在bash提取子]的awk

[jaypal:~/Temp] awk -F. '{print substr ($5,3,2)}' <<< x=xyz.2.3.4.fc15.i686 
15