删除第一期和第二期,同时保持一切(Linux)

时间:2013-09-04 20:25:06

标签: linux shell

用户调用脚本以及输入XX.XX.XX.XX,其中X's是数字。 我正试图从左边提取第二组XX

我看了一些例子:

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

但是如果不解释特殊角色的作用,我就无法解决问题。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分: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

使用不带阵列2的纯BASH

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

使用sed:

sed 's/^[^.]*\.\([^.]*\).*$/\1/' <<< "$x"
34

答案 1 :(得分:1)

纯旧的Bourne shell:

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

你也可以零碎地进行字符串替换:

x=${1#*.}
echo "${x%%.*}"

答案 2 :(得分: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