1

用户调用脚本以及输入数字XX.XX.XX.XX在哪里X's。我正在尝试XX从左侧提取第二组。

我查看了以下示例:

${1%.*}  <- deletes the last . and everything else after
${1##*.} <- deletes last . and everything before

但是没有解释特殊字符的作用,我无法解决我的问题。

任何帮助将不胜感激。

4

3 回答 3

3

使用 awk:

x='12.34.56.78'
awk -F '.' '{print $2}' <<< "$x"
34

使用纯 BASH(数组):

n=$(IFS='.' read -ra arr <<< "$x" && echo "${arr[1]}") && echo "$n"
34

使用不带数组的纯 BASH 1:

y="${x#*.}"
echo "${y%%.*}"
34

使用没有数组的纯 BASH 2:

n=$(IFS='.' && set -- $x && echo "$2") && echo "$n"
34

使用 sed:

sed 's/^[^.]*\.\([^.]*\).*$/\1/' <<< "$x"
34
于 2013-09-04T20:33:08.297 回答
1

纯旧的 Bourne shell:

(IFS=. ; set $1; echo "$2")

您也可以零敲碎打地进行字符串替换:

x=${1#*.}
echo "${x%%.*}"
于 2013-09-04T20:46:04.853 回答
0

这里你输入的 XX.XX.XX.XX 长度是相同的,你需要 3,4 的索引

XX.XX.XX.XX 
01234567... //indexes  


x="12.34.56.78"
result=${x:3:4} 
echo $result 

结果将是 34

于 2013-09-04T20:39:58.857 回答