linux 字符串分割

有一个类似”a:d::b::c”的字符串需要用bash shell以”::”分割开,分别得到a:d,b,c。

方案一

1
2
3
4
5
6
7
8
9
a="a:d::b::c"
OLD_IFS="$IFS"
IFS="::"
arr=($a)
IFS="$OLD_IFS"
for s in ${arr[@]}
do
echo "$s"
done

输出:

a
d
b
c


第一个不是a:d,需再次处理

方案二

echo $p|cut -d '::' -f1
输出:

cut: bad delimiter

cut分隔符只能是单字符。

方案三

1
echo $p|awk -F "::"  '{print $1; print $2; print $3}'

输出:

a:d
b
c


赋值:
1
link=`echo $p|awk -F "::"  '{print $1}'`

问题解决。当然这只是固定分隔数的简单情况,复杂的情况用strstr?