shell 字符串 *** 作实例

shell 字符串 *** 作实例,第1张

shell 字符串 *** 作实例 Background
  • 在写脚本时,经常会涉及到字符串相关 *** 作。当然,像awk、sed等都可以实现字符串各种 *** 作。不过,使用shell内部 *** 作符会省略启动外部程序等时间,速度相差上百倍,调用外部命令处理,与内置 *** 作符性能相差非常大(见下例1所示1)。在shell编程中,尽量用内置 *** 作符或者函数完成。
  • 这里记录下常用的字符串处理方法,方便以后查找使用。
一、这里 wlf 字符串为例进行几个实例 *** 作
[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. 例子1【性能差了多少自己看吧】
    ↩︎

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5685477.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存