Linux Bash Shell 字符串截取

代码

代码中 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 左边的所有字符。

参考:
Shell 字符串截取(非常详细)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值