蔬菜小程序的开发全流程详解
776
2022-11-15
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~