转载-Shell脚本中字符串截取功能

在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

posted @ 2023-03-02 21:58  打工的小猪  阅读(369)  评论(0编辑  收藏  举报