在Shell脚本编写中,有几个地方都是要用到字符串截取的功能,那将这块的内容进行下记录:

1、字符串变量的截取操作

对字符串变量的截取操作一般都是通过${操作符}的方式进行

1)从指定位置index截取固定长度

格式:

${string:start:length}
其中,string是要截取的字符串,start是起始位置(下标从0开始计数),length是要截取的长度(省略就直接截到末尾)。

例如:

str_time='2022-02-01 12:30:58'
date_no=${str_time:0:10} #截取前面10位字符:2022-01-01
date_mon=${str_time:5:2} #从前面第6位开始截取2位字符:02
date_time=${str_time:0-8} #截取后面8位字符:12:30:58
date_hh=${str_time:0-8:2} #截取后面8位字符的前面两位:12
2)截取指定字符串(子字符串)左边的字符

格式:

${string%substr*} #匹配从右往左第一个substr
${string%%substr*} #匹配从右往左最后一个substr
说明:删除substr以及substr右边的任意字符串,*在substr的右边,那最终将会得到substr左边剩余的字符串。两个格式是区别substr的位置。

3)截取指定字符串(子字符串)右边的字符

${string#*substr} #匹配从左往右第一个substr
${string##*substr} #匹配从左往右最后一个substr
说明:删除substr以及substr左边的任意字符串,*在substr的左边,那最终将会得到substr右边剩余的字符串。两个格式的区别substr的位置。

这两个#和%截取字符串的用法,比较容易混淆。

记忆小技巧:

键盘上#号在$键的左边,所以是操作并删除左边字符,所以*在substr左边,一个#号代表取第一个substr(从左往右):${string#*substr}

键盘上%号在$键的右边,所以是操作并删除右边字符,所以*在substr的右边,一个%代表取第一个substr(从右往左):${string%substr*}

案例1:

val=“hello++world++shell”

echo ${val%++*}
# 删除最后一个 ++ 后边字符,截取前边剩下的内容
# 输出: hello++world

echo ${val%%++*}
# 删除第一个 ++ 后边字符,只截取保留第一个 ++ 前边的内容
# 输出: hello
案例2:

str_file="123.hello.json"

echo ${str_file%.*}
# 删除最后一个 . 后边的json,截取123.hello
# 输出: 123.hello
案例3:

v_str='/app/logs/133.38.112.177_202204111015.log'
echo ${v_str%/*} #截取从右往左第一个'/' 左边的字符:/app/logs
echo ${v_str%%/*} #截取从右往左最后个'/' 左边的字符:空
案例4:

v_str='/app/logs/133.38.112.177_202204111015.log'
#截取从左往右第一个'/' 右边的字符:app/logs/133.38.112.177_202204111015.log
echo ${v_str#*/}
#截取从左往右最后个'/' 右边的字符:133.38.112.177_202204111015.log
echo ${v_str##*/}
————————————————
版权声明:本文为CSDN博主「CCH2023」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chang_chunhua/article/details/128341906

最新文章

  1. css绝对定位如何在不同分辨率下的电脑正常显示定位位置?
  2. 在WebAPI使用Session
  3. 【2016-10-13】【坚持学习】【Day4】【模板方法模式】
  4. xargs命令
  5. 20145317彭垚 java课程总结
  6. win7 加域开机自动登录域用户
  7. R-大数据分析挖掘(3-R作图)
  8. css.day02
  9. GNU Autotools的研究(转)
  10. 如何在.xml中配置Servlet信息
  11. 猎八哥浅谈MYSQL触发器
  12. Python协程深入理解
  13. Linux系列教程(九)——Linux常用命令之网络和关机重启命令
  14. PHP防XSS 防SQL注入的代码
  15. javaweb闲暇小程序之抽签程序
  16. Solved: RDP Disconnected – Error Code 2825 mremote
  17. Ruby on rails 项目启动流程
  18. JavaScript大杂烩11 - 理解事件驱动
  19. mysql 语句根据身份证查询年龄,地址,性别
  20. IntelliJ IDEA 中安装junit插件

热门文章

  1. LG P1919
  2. Python arcpy创建栅格、批量拼接栅格
  3. 2023.2.26【模板】扩展Lucas定理
  4. Python 生成多个空列表 空List 空数组方法
  5. 回顾——Dom节点类型
  6. JDK的版本有多少种,Java开发者应该选择哪一种?
  7. Android FragmentTabHost底部选项卡实现
  8. antdVue 重置select和input的样式 去掉蓝色换成灰色
  9. PTA---求月天数
  10. iOS 防止charles抓包