shell脚本对字符串变量取值的处理

定义字符串变量

table_name='maomao_table_temp_20220106'

获取变量字符串长度

# ${#变量名}
echo ${#table_name}  # 结果: 26

字符串变量的位数截取

# 从左边开始截取 ${变量名:起始位置:截取位数};字符串就相当于字符数组,从0开始计算位数
echo ${table_name:7:5} # 结果: table

# 可以将截取位数省略,就相当于截取从起始位置开始直到末尾的字符
echo ${table_name:7} # 结果: table_temp_20220106

# 从右边开始截取 ${变量名:0-起始位置:截取位数}/${变量名: -起始位置:截取位数},只影响起始位置的判断。如下表示从倒数第8的位置往后截取4位
echo ${table_name:0-8:4} #结果: 2022
echo ${table_name: -8:4} #结果: 2022

# 可以省略截取位数,也相当于截取到末尾
echo ${table_name:0-8} # 结果: 20220106
echo ${table_name: -8} # 结果: 20220106

字符串变量的匹配截取

# 从左边开始匹配字符,删除包括匹配到的字符左边所有的字符 ${变量名#*匹配字符*匹配字符...},每写一个*匹配字符就从左边开始匹配删除一个匹配到的字符串
echo ${table_name#*_} # 结果: table_temp_20220106
echo ${table_name#*_*_} # 结果: temp_20220106

# 贪婪匹配 ${变量名##*匹配字符} 会尽可能多的删除字符串
echo ${table_name##*_} # 结果: 20220106

# 从右边开始匹配字符,删除包括匹配到的字符右边所有的字符 ${变量名%匹配字符*匹配字符*...},每写一个*匹配字符就从右边开始匹配删除一个匹配到的字符串
echo ${table_name%_*} # 结果: maomao_table_temp
echo ${table_name%_*_*} # 结果: maomao_table

# 贪婪匹配 ${变量名%%匹配字符*} 会尽可能多的删除字符串
echo ${table_name%%_*} # 结果: maomao

定义字符串变量

str='maomao_table_tmp_tmp_20220106'

字符串变量的匹配替换

# 从左边开始替换第一个匹配到的字符 ${变量名/匹配字符/替换字符}
echo ${str/tmp/TMP} # 结果: maomao_table_TMP_tmp_20220106

# 替换所有匹配到的字符 ${变量名//匹配字符/替换字符}
echo ${str//tmp/TMP} # 结果: maomao_table_TMP_TMP_20220106
posted @ 2022-04-07 18:58  玩转大数据  阅读(696)  评论(0编辑  收藏  举报