shell的字符串截取

网友投稿 764 2022-11-15

shell的字符串截取

shell的字符串截取

近期在编写一个 sh 脚本时,又被 for 循环取两个变量卡住了,虽然之前用 Python 实现过,但是 sh 总归实现不了,今天又看了看 Python 的实现过程,发现原来 sh 也可以这样。

现一文件内有如下内容,我们将通过编写 sh 脚本来逐行打印截取后的每一行内容

[root@centos-master string]# cat Ddate.txt startDate=2018-01-01 00:00:00=endDate=2018-01-31 23:59:59startDate=2018-02-01 00:00:00=endDate=2018-02-31 23:59:59startDate=2018-03-01 00:00:00=endDate=2018-03-31 23:59:59startDate=2018-04-01 00:00:00=endDate=2018-04-31 23:59:59startDate=2018-05-01 00:00:00=endDate=2018-05-31 23:59:59startDate=2018-06-01 00:00:00=endDate=2018-06-31 23:59:59startDate=2018-07-01 00:00:00=endDate=2018-07-31 23:59:59startDate=2018-08-01 00:00:00=endDate=2018-08-31 23:59:59startDate=2018-09-01 00:00:00=endDate=2018-09-31 23:59:59

首先我们先编写出逐行打印出文件内容的脚本如下

#!/bin/bashcat /home/zyy/string/Ddate.txt | while read linedo startDate=${line} echo "$startDate"done

运行结果如下所示

[root@centos-master string]# sh idate.sh startDate=2018-01-01 00:00:00=endDate=2018-01-31 23:59:59startDate=2018-02-01 00:00:00=endDate=2018-02-31 23:59:59startDate=2018-03-01 00:00:00=endDate=2018-03-31 23:59:59startDate=2018-04-01 00:00:00=endDate=2018-04-31 23:59:59startDate=2018-05-01 00:00:00=endDate=2018-05-31 23:59:59startDate=2018-06-01 00:00:00=endDate=2018-06-31 23:59:59startDate=2018-07-01 00:00:00=endDate=2018-07-31 23:59:59startDate=2018-08-01 00:00:00=endDate=2018-08-31 23:59:59startDate=2018-09-01 00:00:00=endDate=2018-09-31 23:59:59

接下来我们就开始对遍历出来的字符串进行截取操作。

一、删除左边字符

1、= 号截取,删除左边字符,保留右边字符

startDate=${line#*=}其中 line 是变量名,# 号是运算符,*= 表示从左边开始删除第一个 = 号及左边的所有字符

完整脚本如下

#!/bin/bashcat /home/zyy/string/Ddate.txt | while read linedo startDate=${line#*=} echo "$startDate"done

运行结果

[root@centos-master string]# sh idate.sh 2018-01-01 00:00:00=endDate=2018-01-31 23:59:592018-02-01 00:00:00=endDate=2018-02-31 23:59:592018-03-01 00:00:00=endDate=2018-03-31 23:59:592018-04-01 00:00:00=endDate=2018-04-31 23:59:592018-05-01 00:00:00=endDate=2018-05-31 23:59:592018-06-01 00:00:00=endDate=2018-06-31 23:59:592018-07-01 00:00:00=endDate=2018-07-31 23:59:592018-08-01 00:00:00=endDate=2018-08-31 23:59:592018-09-01 00:00:00=endDate=2018-09-31 23:59:59

2、## 号截取,删除左边字符,保留右边字符

startDate=${line##*=}其中 line 是变量名,## 是运算符,*= 表示从左边开始删除最后(最右边)一个 = 号及左边的所有字符

完整脚本如下

#!/bin/bashcat /home/zyy/string/Ddate.txt | while read linedo startDate=${line##*=} echo "$startDate"done

运行结果

[root@centos-master string]# sh idate.sh 2018-01-31 23:59:592018-02-31 23:59:592018-03-31 23:59:592018-04-31 23:59:592018-05-31 23:59:592018-06-31 23:59:592018-07-31 23:59:592018-08-31 23:59:592018-09-31 23:59:59

二、删除右边字符

3、% 号截取,删除右边字符,保留左边字符

startDate=${line%=*}其中 line 是变量名,% 是运算符,=* 表示从右边开始,删除第一个 = 号及右边的字符

完整脚本如下

#!/bin/bashcat /home/zyy/string/Ddate.txt | while read linedo startDate=${line%=*} echo "$startDate"done

运行结果

[root@centos-master string]# sh idate.sh startDate=2018-01-01 00:00:00=endDatestartDate=2018-02-01 00:00:00=endDatestartDate=2018-03-01 00:00:00=endDatestartDate=2018-04-01 00:00:00=endDatestartDate=2018-05-01 00:00:00=endDatestartDate=2018-06-01 00:00:00=endDatestartDate=2018-07-01 00:00:00=endDatestartDate=2018-08-01 00:00:00=endDatestartDate=2018-09-01 00:00:00=endDate

4、%% 号截取,删除右边字符,保留左边字符

startDate=${line%%=*}其中 line 是字符串,%% 是运算符,=* 表示从右边开始,删除最后(最左边)一个 = 号及右边的字符

完整脚本如下

#!/bin/bashcat /home/zyy/string/Ddate.txt | while read linedo startDate=${line%%=*} echo "$startDate"done

运行结果

[root@centos-master string]# sh idate.sh startDatestartDatestartDatestartDatestartDatestartDatestartDatestartDatestartDate

三、从左边定位字符

5、从左边第几个字符开始,及字符的个数

startDate=${line:0:20}其中 0 表示从左边第一个字符开始,20 表示字符的总个数

完整脚本如下

#!/bin/bashcat /home/zyy/string/Ddate.txt | while read linedo startDate=${line:0:20} echo "$startDate"done

运行结果

[root@centos-master string]# sh idate.sh startDate=2018-01-01startDate=2018-02-01startDate=2018-03-01startDate=2018-04-01startDate=2018-05-01startDate=2018-06-01startDate=2018-07-01startDate=2018-08-01startDate=2018-09-01

6、从左边第几个字符开始,一直到结束

startDate=${line:30}其中 30 表示从左边第 31 个字符开始,一直到结束

完整脚本如下

#!/bin/bashcat /home/zyy/string/Ddate.txt | while read linedo startDate=${line:30} echo "$startDate"done

运行结果

[root@centos-master string]# sh idate.sh endDate=2018-01-31 23:59:59endDate=2018-02-31 23:59:59endDate=2018-03-31 23:59:59endDate=2018-04-31 23:59:59endDate=2018-05-31 23:59:59endDate=2018-06-31 23:59:59endDate=2018-07-31 23:59:59endDate=2018-08-31 23:59:59endDate=2018-09-31 23:59:59

四、从右边定位字符

7、从右边第几个字符开始,及字符的个数

startDate=${line:0-19:10}其中 0-19 表示从右边算起第十九个字符开始,10 表示字符的个数

完整脚本如下

#!/bin/bashcat /home/zyy/string/Ddate.txt | while read linedo startDate=${line:0-19:10} echo "$startDate"done

运行结果

[root@centos-master string]# sh idate.sh 2018-01-312018-02-312018-03-312018-04-312018-05-312018-06-312018-07-312018-08-312018-09-31

8、从右边第几个字符开始,一直到结束

startDate=${line:0-19}其中 0-19 表示从右边开始第 19 个字符起,一直到结束# 注: 左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示

完整脚本如下

#!/bin/bashcat /home/zyy/string/Ddate.txt | while read linedo startDate=${line:0-19} echo "$startDate"done

运行结果

[root@centos-master string]# sh idate.sh 2018-01-31 23:59:592018-02-31 23:59:592018-03-31 23:59:592018-04-31 23:59:592018-05-31 23:59:592018-06-31 23:59:592018-07-31 23:59:592018-08-31 23:59:592018-09-31 23:59:59

参考资料

1. ​​Shell脚本8种字符串截取方法总结​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JVM 之 运行时数据区(更新)
下一篇:【JS 逆向百例】网洛者反爬练习平台第六题:JS 加密,环境模拟检测
相关文章

 发表评论

暂时没有评论,来抢沙发吧~