一、这里 wlf 字符串为例进行几个实例 *** 作
- 在写脚本时,经常会涉及到字符串相关 *** 作。当然,像awk、sed等都可以实现字符串各种 *** 作。不过,使用shell内部 *** 作符会省略启动外部程序等时间,速度相差上百倍,调用外部命令处理,与内置 *** 作符性能相差非常大(见下例1所示1)。在shell编程中,尽量用内置 *** 作符或者函数完成。
- 这里记录下常用的字符串处理方法,方便以后查找使用。
[root@elephant ~]# wlf=/root/projects/hzz/hzz-server/hzz-server-1.0-SNAPSHOT.jar [root@elephant ~]# echo $wlf /root/projects/hzz/hzz-server/hzz-server-1.0-SNAPSHOT.jar [root@elephant ~]#1、获取 项目jar包【hzz-server-1.0-SNAPSHOT.jar】
文末对方法1和方法3进行了性能测试,结果自己看吧。使用其他非内置 *** 作符如awk、sed等会出现类似方法3的结果,不信自己测试哈。
- 方法1(内置 *** 作符)
# #号代表从左向右删除,第二个#号代表一直删除到最后一个,*/代表删除斜杠左面的 [root@elephant ~]# echo ${wlf##*/} hzz-server-1.0-SNAPSHOT.jar [root@elephant ~]#
- 方法2
第一步:用斜杠/切分成数组,四个/的含义:第一个代表字符串替换,第二个代表全局替换,第三个代表替换哪个字符串,第四个代表替换成哪个字符串;这里是把斜杠/替换成了空格,然后转成了数组。
第二步:打印数组内容(这里@可用*)。
第三步:打印数组下标(这里@可用*)。
第四步:根据下标取内容。
注意: 1234代表四个斜杠/,见下图(这里我咨询csdn客服了,无法显示四个斜杠哈)。
# 这里的1234代表四个斜杠/,见下图 [root@elephant ~]# arr_wlf=(${wlf1234 }) [root@elephant ~]# echo ${arr_wlf[@]} root projects hzz hzz-server hzz-server-1.0-SNAPSHOT.jar [root@elephant ~]# echo ${!arr_wlf[@]} 0 1 2 3 4 [root@elephant ~]# echo ${arr_wlf[4]} hzz-server-1.0-SNAPSHOT.jar [root@elephant ~]#
- 方法3(非内置 *** 作符)
这里使用的是cut命令,指定分隔符为斜杠/,取第六域。
[root@elephant ~]# echo $wlf | cut -d / -f6 hzz-server-1.0-SNAPSHOT.jar [root@elephant ~]#3、获取 jar包所在目录 【/root/projects/hzz/hzz-server/】
这里 % 与前面的 # 刚好相反,是从右向左删除,只有一个 % 说明从右向左删除直到第一个斜杠 /
[root@elephant ~]# echo ${wlf%} [root@elephant ~]# echo $wlf_jar hzz-server-1.0-SNAPSHOT.jar [root@elephant ~]# echo ${wlf_jar%-*} hzz-server-1.0 [root@elephant ~]#5、获取 项目jar包后缀【SNAPSHOT.jar】
[root@elephant ~]# echo ${wlf_jar##*-} SNAPSHOT.jar [root@elephant ~]#6、获取 项目所在目录 【/root/projects/hzz/hzz-server/】
[root@elephant ~]# echo ${wlf%};done; real 0m0.105s user 0m0.103s sys 0m0.001s [root@elephant ~]# time for i in $(seq 10000);do a=$(echo $wlf | cut -d / -f6);done; real 0m22.392s user 0m13.421s sys 0m16.041s [root@elephant ~]#
例子1【性能差了多少自己看吧】
↩︎
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)