Chinaunix首页 | 论坛 | 博客
  • 博客访问: 502779
  • 博文数量: 140
  • 博客积分: 461
  • 博客等级: 下士
  • 技术积分: 878
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-28 10:06
文章分类

全部博文(140)

文章存档

2016年(1)

2015年(6)

2014年(20)

2013年(1)

2012年(16)

2011年(96)

分类:

2011-05-20 16:48:58

awk,sed是shell里最常用的分隔字符串的命令
但是对于不可见字符(\n,\r,\t),对于特殊字符(?,*,#,$)做分割符,操作比较困难
而且获取结果不方便,
 
 
因此我写了个分割函数支持
1.各种不可见字符(\n,\r,\t),对于特殊字符(?,*,#,$),任意长度的分隔符
2.返回结果为数组
 
代码如下:
  1. #!/bin/bash
  2. #分割字符串函数
  3. #参数1 split_argv1:要分割的字符串
  4. #参数2 split_argv2:分隔符
  5. #返回值:0:成功,1:失败;
  6. #结果集:split_array数组
  7. #
  8. split_str(){
  9. if [ "$split_argv2" == "" ]
  10. then
  11. return 1;
  12. fi
  13. split_len=0;
  14. split_array=();
  15. break_len=${#split_argv2}
  16. #判断是否包含分隔符,获取索引
  17. index=`expr index "$split_argv1" "$split_argv2"`
  18. while [[ "$index" -gt "0" ]]
  19. do
  20. #获得分割好的字符串
  21. split_array[$split_len]=${split_argv1:0:$index-1}
  22. split_len=$split_len+1;
  23. #记录截断的字符串
  24. split_argv1=${split_argv1:$index-1+break_len}
  25. index=`expr index "$split_argv1" "$split_argv2"`
  26. done
  27. #把最后一个保存
  28. split_array[$split_len]=$split_argv1;
  29. return 0;
  30. }
  31. echo "------------------------------------------------------------------"
  32. split_argv1=$1;
  33. split_argv2=$2;
  34. echo "argv1=[$1]"
  35. echo "argv2=[$2]"
  36. #测试
  37. split_str $1 $2
  38. #打印结果
  39. alen=${#split_array[*]};
  40. echo -n "result="
  41. for ((i=0;i< $alen;i++))
  42. do
  43. echo -n "["${split_array[$i]}"],";
  44. done
  45. echo "";
  46. echo "------------------------------------------------------------------"
  47. exit 0;
运行结果
  1. ------------------------------------------------------------------
  2. [root@localhost cgi-bin]# sh split_str.sh "1*2*3*4" "*"
  3. ------------------------------------------------------------------
  4. argv1=[1*2*3*4]
  5. argv2=[*]
  6. result=[1],[2],[3],[4],
  7. ------------------------------------------------------------------
  8. [root@localhost cgi-bin]# sh split_str.sh "a
  9. b
  10. c
  11. d" "
  12. "
  13. ------------------------------------------------------------------
  14. argv1=[a
  15. b
  16. c
  17. d]
  18. argv2=[
  19. ]
  20. result=[a],[b],[c],[d],
  21. ------------------------------------------------------------------
  22. [root@localhost cgi-bin]# sh split_str.sh "1abc23 abcd4" "abc"
  23. ------------------------------------------------------------------
  24. argv1=[1abc23 abcd4]
  25. argv2=[abc]
  26. result=[1],[23 ],[d4],
  27. ------------------------------------------------------------------
end
阅读(2040) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~