代码
代码中 source ./publicFunctions.sh 添加的是自己总结的一些常用方法,如spilitLine = 指的是打印一行50个等号"=",用作分隔行。
#!/bin/bash
source ./publicFunctions.sh
str="woAiBeiJingTianAnMen!"
# 字符串截取
splitLine =
echo "1 截取指定位置的字符串,从左侧开始:str:startIndex:cutLenth"
str_2_9=${str:2:9}
echo "截取${str}的字符串,从第二个元素开始,截取9个元素:${str_2_9}"
splitLine =
echo "2 截取指定位置的字符串,从右侧开始:str:0-indexFromRight:cutLenth"
str_rightFrom_9=${str:0-18:9}
echo "截取${str}的字符串,从右侧数第18个开始,向右截取9个字符:${str_rightFrom_9}"
splitLine =
echo "3 截取第一次匹配到分隔符(不包含分隔符)右侧的所有字符。"
str_remain_right_from_first_seperation=${str#*Be}
echo "截取${str}的字符串,从左侧开始匹配到第一个分隔符 B 后,获取其后所有字符串(不包含分隔符):"${str_remain_right_from_first_seperation}
splitLine =
echo "4 截取最后一次匹配到分隔符(不包含分隔符)右侧的所有字符。"
str_remain_right_from_last_seperation=${str##*i}
echo "截取${str}的字符串,从左侧开始匹配到最后一个分隔符 i 后,获取其后所有字符串(不包含分隔符):"${str_remain_right_from_last_seperation}
splitLine =
echo "5 截取第一次匹配到分隔符(不包含分隔符)左侧的所有字符。"
str_remain_left_from_first_seperation=${str%A*}
echo "截取${str}的字符串,从右侧开始匹配到第一个分隔符 A 后,获取其前面所有字符串(不包含分隔符):"${str_remain_left_from_first_seperation}
splitLine =
echo "6 截取最后一次匹配到分隔符(不包含分隔符)左侧的所有字符。"
str_remain_left_from_last_seperation=${str%%A*}
echo "截取${str}的字符串,从左侧开始匹配到最后一个分隔符 A 后,获取其前面所有字符串(不包含分隔符):"${str_remain_left_from_last_seperation}
结果
[root@web-bacend-test001 scripts]# sh strings.sh
==================================================
1 截取指定位置的字符串,从左侧开始:str:startIndex:cutLenth
截取woAiBeiJingTianAnMen!的字符串,从第二个元素开始,截取9个元素:AiBeiJing
==================================================
2 截取指定位置的字符串,从右侧开始:str:0-indexFromRight:cutLenth
截取woAiBeiJingTianAnMen!的字符串,从右侧数第18个开始,向右截取9个字符:iBeiJingT
==================================================
3 截取第一次匹配到分隔符(不包含分隔符)右侧的所有字符。
截取woAiBeiJingTianAnMen!的字符串,从左侧开始匹配到第一个分隔符 B 后,获取其后所有字符串(不包含分隔符):iJingTianAnMen!
==================================================
4 截取最后一次匹配到分隔符(不包含分隔符)右侧的所有字符。
截取woAiBeiJingTianAnMen!的字符串,从左侧开始匹配到最后一个分隔符 i 后,获取其后所有字符串(不包含分隔符):anAnMen!
==================================================
5 截取第一次匹配到分隔符(不包含分隔符)左侧的所有字符。
截取woAiBeiJingTianAnMen!的字符串,从右侧开始匹配到第一个分隔符 A 后,获取其前面所有字符串(不包含分隔符):woAiBeiJingTian
==================================================
6 截取最后一次匹配到分隔符(不包含分隔符)左侧的所有字符。
截取woAiBeiJingTianAnMen!的字符串,从左侧开始匹配到最后一个分隔符 A 后,获取其前面所有字符串(不包含分隔符):wo
总结
格式 | 说明 |
---|---|
${string: start :length} | 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。 |
${string: start} | 从 string 字符串的左边第 start 个字符开始向右截取,直到最后。 |
${string: 0-start :length} | 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。 |
${string: 0-start} | 从 string 字符串的右边第 start 个字符开始向右截取,直到最后。 |
${string#*chars} | 从 string 字符串左侧第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。 |
${string##*chars} | 从 string 字符串左侧最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。 |
${string%*chars} | 从 string 字符串右侧起第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。 |
${string%%*chars} | 从 string 字符串右侧起最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。 |