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

标签: linux, linux shell

添加新评论