例如 - $x=xyz.2.3.4.fc15.i686
输出要求= 15
(即在fc和.i686之间)
答案 0 :(得分:15)
$ x=xyz.2.3.4.fc15.i686
$ y=${x#*fc}
$ z=${y%.*}
$ echo $z
15
#
left strip %
右条答案 1 :(得分:4)
有几种方法可以做到这一点。如果原始字符串的长度不变,则可以使用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
答案 2 :(得分:4)
使用bash
或ksh
您无需外部实用程序:
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
):
bash-4.2$ x='xyz.2.3.4.fc15.i686'
bash-4.2$ [[ "$x" =~ fc(.+)\.i686 ]]
bash-4.2$ echo "${BASH_REMATCH[1]}"
15
答案 3 :(得分:1)
您可以使用awk
[jaypal:~/Temp] awk -F. '{print substr ($5,3,2)}' <<< x=xyz.2.3.4.fc15.i686
15
答案 4 :(得分:0)
使用sed
的一种方式:
echo $x | sed 's/.*fc\([0-9]*\)\.i686/\1/'