在日常运维工作中,经常会碰到需要在一个字符串中截取我们需要的某些字符的需求,之前介绍了Shell脚本中数组的使用方法,这里介绍下基于字符串的截取的方法。在shell中截取字符串的方法有下面集中:
${var#*/}
${var##*/}
${var%/*}
${var%%/*}
${var:start:len}
${var:start}
${var:0-start:len}
${var:0-start}
可以总结为:
********************************************
# 删除最小的匹配前缀
## 删除最大的匹配前缀
% 删除最小的匹配后缀
%% 删除最大的匹配后缀
********************************************
1)获得字符串的长度
语法:${#var}
[root@kevin~]
# cat test.sh
#!/bin/bash
str=
"http://www.kevin.com/shibo/anhuigrace"
echo
"string: [${str}]"
length=${
#str}
echo
"length: [${length}]"
执行结果为:
[root@kevin~]
# sh test.sh
string: [http:
//www
.kevin.com
/shibo/anhuigrace
]
length: [37]
2)使用 # 和 ## 获取尾部子字符串(*号在分隔符的前面,就去掉其之前的字符)
2.1) # 最小限度从前面截取word
语法:${parameter#*word} , 即截取 “第一个分隔符word及其之前的字符全部删掉”后的字符
2.1) # 最小限度从前面截取word
语法:${parameter#*word} , 即截取 “第一个分隔符word及其之前的字符全部删掉”后的字符
[root@kevin~]
# cat test.sh
#!/bin/bash
str=
"http://www.kevin.com/shibo/anhuigrace"
echo
"string: [${str}]"
#分割符为'/'
substr=${str
#*/}
echo
"substr: [${substr}]"
执行结果为:
[root@kevin~]
# sh test.sh
string: [http:
//www
.kevin.com
/shibo/anhuigrace
]
substr: [
/www
.kevin.com
/shibo/anhuigrace
]
2.2)## 最大限度从前面截取word
语法:${parameter##*word},即截取 “最后一个分隔符word及其之前的字符全部删掉”后的字符
语法:${parameter##*word},即截取 “最后一个分隔符word及其之前的字符全部删掉”后的字符
[root@kevin~]
# cat test.sh
#!/bin/bash
str=
"http://www.kevin.com/shibo/anhuigrace"
echo
"string: [${str}]"
#分割符为'/'
substr=${str
##*/}
echo
"substr : [${substr}]"
执行结果为:
[root@kevin~]
# sh test.sh
string: [http:
//www
.kevin.com
/shibo/anhuigrace
]
substr : [anhuigrace]
3)使用 % 和 %% 获取头部子字符串 (*在分隔符的后面,就去掉其之后的字符)
3.1)% 最小限度从后面截取word
语法:${parameter%word*},即截取 “最后一个分隔符word及其之后的字符全部删掉”后的字符
3.1)% 最小限度从后面截取word
语法:${parameter%word*},即截取 “最后一个分隔符word及其之后的字符全部删掉”后的字符
[root@kevin~]
# cat test.sh
#!/bin/bash
str=
"http://www.kevin.com/shibo/anhuigrace"
echo
"string: [${str}]"
substr=${str%/*}
echo
"substr : [${substr}]"
执行结果为:
[root@kevin~]
# sh test.sh
string: [http:
//www
.kevin.com
/shibo/anhuigrace
]
substr : [http:
//www
.kevin.com
/shibo
]
3.2)%% 最大限度从后面截取word
语法:${parameter%%*word},即截取 “第一个分隔符word及其之后的字符全部删掉”后的字符
语法:${parameter%%*word},即截取 “第一个分隔符word及其之后的字符全部删掉”后的字符
[root@kevin~]
# cat test.sh
#!/bin/bash
str=
"http://www.kevin.com/shibo/anhuigrace"
echo
"string: [${str}]"
substr=${str%%/*}
echo
"substr : [${substr}]"
执行结果为:
[root@kevin~]
# sh test.sh
string: [http:
//www
.kevin.com
/shibo/anhuigrace
]
substr : [http:]
4)使用 ${var:} 模式获取子字符串
4.1)指定从左边第几个字符开始以及子串中字符的个数
语法:${var:start:len}
4.1)指定从左边第几个字符开始以及子串中字符的个数
语法:${var:start:len}
[root@kevin~]
# cat test.sh
#!/bin/bash
str=
"http://www.kevin.com/shibo/anhuigrace"
echo
"string: [${str}]"
#其中的 0 表示左边第一个字符开始,7 表示子字符的总个数。
substr=${str:0:7}
echo
"substr : [${substr}]"
执行结果为:
[root@kevin~]
# sh test.sh
string: [http:
//www
.kevin.com
/shibo/anhuigrace
]
substr : [http:
//
]
4.2)从左边第几个字符开始一直到结束
语法:${var:7}
语法:${var:7}
[root@kevin~]
# cat test.sh
#!/bin/bash
str=
"http://www.kevin.com/shibo/anhuigrace"
echo
"string: [${str}]"
#其中的7表示左边第8个字符开始 (如果是${str:7:5},就表示从左边第8个字符开始截取,截取5个字符)
substr=${str:7}
echo
"substr : [${substr}]"
执行结果为:
[root@kevin~]
# sh test.sh
string: [http:
//www
.kevin.com
/shibo/anhuigrace
]
substr : [www.kevin.com
/shibo/anhuigrace
]
4.3)从右边第几个字符开始以及字符的个数
语法:${var:0-start:len};即${var:0-8,3} 和 ${var:2-10:3} 和 ${var:5:13:3} 是一样的,即从右边第8个开始截取,截取3个字符。 即8-0=10-2=13-5=8
语法:${var:0-start:len};即${var:0-8,3} 和 ${var:2-10:3} 和 ${var:5:13:3} 是一样的,即从右边第8个开始截取,截取3个字符。 即8-0=10-2=13-5=8
[root@kevin~]
# cat test.sh
#!/bin/bash
str=
"http://www.kevin.com/shibo/anhuigrace"
echo
"string: [${str}]"
#其中的 0-23 表示右边算起第23个字符开始,5 表示字符的个数
substr=${str:0-23:5}
echo
"substr : [${substr}]"
执行结果为:
[root@kevin~]
# sh test.sh
string: [http:
//www
.kevin.com
/shibo/anhuigrace
]
substr : [
in
.co]
4.4)从右边第几个字符开始一直到结束
语法:${var:0-start}
语法:${var:0-start}
[root@kevin~]
# cat test.sh
#!/bin/bash
str=
"http://www.kevin.com/shibo/anhuigrace"
echo
"string: [${str}]"
#其中的 0-6 表示右边算起第6个字符开始
substr=${str:0-6}
echo
"substr : [${substr}]"
执行结果为:
[root@kevin~]
# sh test.sh
string: [http:
//www
.kevin.com
/shibo/anhuigrace
]
substr : [igrace]
格式 | 说明 |
---|---|
${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 左边的所有字符。 |
评论前必须登录!
注册