Linux shell字符串截取与拼接
一 Linux 的字符串截取很有用。有八种方法。
假设有变量 var=http://jinblog.com/archives/752.html
1 # 号截取,从左开始匹配符合规则的字串(参考正则的非贪婪模式),如果匹配到,就去掉,可以使用通配符
echo ${var#*//}
其中 var 是变量名,# 号是运算符,
// 表示要替换的字串的表达式,是通配符
例子:
# 匹配到了http,所以去掉http
[root@jin test]# echo ${var#http}
://jinblog.com/archives/752.html
# 没有匹配到,所以不会做任何操作
[root@jin test]# echo ${var#ttp}
http://jinblog.com/archives/752.html
# 这里使用了通配符
[root@jin test]# echo ${var#*ttp}
://jinblog.com/archives/752.html
2 ## 号截取,从左开始匹配符合规则的字串(参考正则的贪婪模式),如果匹配到,就去掉,可以使用通配符
echo ${var##*/}
##号是运算符 */ 表示要替换的字串的表达式 * 是通配符
[root@jin test]# echo ${var##http}
://jinblog.com/archives/752.html
[root@jin test]# echo ${var##ttp}
http://jinblog.com/archives/752.html
[root@jin test]# echo ${var##*/}
752.html
3 % 号截取,从右开始匹配符合规则的字串(参考正则的非贪婪模式),如果匹配到,就去掉,可以使用通配符
echo ${var#%//}
其中 var 是变量名,% 号是运算符,
// 表示要替换的字串的表达式,是通配符
例子:
# 匹配到了html,所以去掉html
[root@jin ~]# echo ${var%html}
http://jinblog.com/archives/752.
# 没有匹配到htm,所以不会做任何操作
[root@jin ~]# echo ${var%htm}
http://jinblog.com/archives/752.html
# 这里使用了通配符,所以可以匹配到html,所以去掉了html
[root@jin ~]# echo ${var%htm*}
http://jinblog.com/archives/752.
# 这里使用了通配符,注意这里去掉部分
[root@jin ~]# echo ${var%/*}
http://jinblog.com/archives
4 %% 号截取,从右开始匹配符合规则的字串(参考正则的贪婪模式),如果匹配到,就去掉,可以使用通配符
echo ${var##*/}
##号是运算符 */ 表示要替换的字串的表达式 * 是通配符
# 匹配到了html,所以去掉html
[root@jin ~]# echo ${var%html}
http://jinblog.com/archives/752.
# 没有匹配到htm,所以不会做任何操作
[root@jin ~]# echo ${var%htm}
http://jinblog.com/archives/752.html
# 这里使用了通配符,所以可以匹配到html,所以去掉了html
[root@jin ~]# echo ${var%htm*}
http://jinblog.com/archives/752.
# 这里使用了通配符,注意这里去掉部分
http://jinblog.com/archives
[root@jin ~]# echo ${var%%/*}
5 从左边第几个字符开始,及字符的个数
echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
[root@jin ~]# echo ${var:0:6}
http:/
6 从左边第几个字符开始,一直到结束。
echo ${var:7}
其中的 7 表示左边第8个字符开始,一直到结束。
[root@jin ~]# echo ${var:6}
/jinblog.com/archives/752.html
6 从右边开始截取
echo ${var:0-1}
截取0-1个字符,0-1的运算结果是-1,其实就是负数就代表从右开始截取,然后截取这个负数的绝对值个字符
# 右边第一个字符
[root@jin ~]# echo ${var:0-1}
l
# 右边第二个字符
[root@jin ~]# echo ${var:0-2}
ml
# 右边第三个字符
[root@jin ~]# echo ${var:0-3}
tml
# 注意这里的结果和上面是一致的
[root@jin ~]# echo ${var:8-11}
tml
# 右边第一个字符是 0-1,0-0其实是0,于是表达式变成了 echo ${var:0}
[root@jin ~]# echo ${var:0-0}
http://jinblog.com/archives/752.html
7 从右边第开始截取,再截取几个字符
echo ${var:0-5:5}
其中的 0-5 表示右边第五个字符开始,截取五个字符
[root@jin ~]# echo ${var:0-5:1}
.
[root@jin ~]# echo ${var:0-5:2}
.h
[root@jin ~]# echo ${var:0-5:3}
.ht
7 从右边第几个字符开始,及字符的个数
echo ${var:0-7:3}
其中的 0-7 表示先截取右边算起的0-7个字符,再把截取出来的字串截取3 个字符
[root@jin ~]# echo ${var:0-6:3}
2.h
Linux Shell 脚本中字符串的拼接方法
[root@iZ23sw4oxfvZ myrepeatsjin]# test=test
[root@iZ23sw4oxfvZ myrepeatsjin]# echo $test
test
[root@iZ23sw4oxfvZ myrepeatsjin]# test=${test}=-=-=-0
[root@iZ23sw4oxfvZ myrepeatsjin]# echo $test
test=-=-=-0