首页 > Shell, 开发 > Shell字符串分割与随机访问

Shell字符串分割与随机访问

2017年11月10日
分类: Shell, 开发 标签: ,
发表评论 阅读评论

    Shell经常做的一项工作就是文本处理,通过组合grep、awk、sed等来实现查找、分割、替换、删除等操作。今天说一下对单行字符串的分割处理方法。先看代码:

_uas="Mozilla/5.0 (Linux; Android 5.1.1; Redmi Note 3) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/535.19|Mozilla/5.0 (Linux; Android 4.4.4; 2014813) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/535.19|Linux; Android 6.0.1; SM-G9008W) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/535.19|Mozilla/5.0 (Linux; Android 5.0.2; Redmi Note 2) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/535.19"

#生成随机索引
_rand_index=$(expr $RANDOM % 4) 

#设置新的分隔符
OLD_IFS="$IFS"
IFS="|" 
#将UA字符串分割到_arr数组中
_arr=($_uas) 
IFS="$OLD_IFS"

#通过下标访问数组中的元素。
_ua=${_arr[$_rand_index]}

    _uas包含以竖线|分隔的4个安卓UA,我想要随机取其中的一个UA来用。这涉及到两点需求:生成一个随机索引,将字符串按照指定的分隔符来分隔。

    Shell生成随机数的方法可以如上面代码一样直接取系统环境变量$RANDOM也可以通过date +%s的方法获取当前的秒数,再和数组长度取模来实现。当然通过系统时间的方法获得的随机数有可能并不很随机,特别是在操作间隔很短的情况下。

    单行字符串分割可以通过awk来实现,然后分别打印各列的值。但是通过设置系统IFS的方法看起来更直接,能够直接通过($string_line)将元素保存在新的数组中,这样就可以以下标的方式来访问。

    Shell还是博大精深的,不常用不足以体会其便捷与强大。

小赢理财-众安保险本息保障

零一积流|IT参考 原创文章,转载请注明出处: http://www.it-refer.com/2017/11/10/shell-string-split-and-random-access


您可能需要这些【参考资料】:
  1. 本文目前尚无任何评论.
您必须在 登录 后才能发布评论.