shell字符串切割的方法

摘要

shell中截取字符串有很多种方法,通常情况可以使用sed、awk、cut来进行字符串切割,本文使用的是shell中字符串本身具有的字符串切割方法

一共有9种使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
${expression}
# 字符串切割
## 最小限度从后面截取word
${parameter%word}
## 最大限度从后面截取word
${parameter%%word}
## 最小限度从前面截取word
${parameter#word}
## 最大限度从前面截取word
${parameter##word}
# 获得字符串长度
${#parameter}
# 缺省值的替换
${parameter:-word}
${parameter:=word}
${parameter:?word}
${parameter:+word}

字符串切割的详细使用方式

使用 % 号操作符

  • 用途是从右边开始删除第一次出现子字符串即其右边字符,保留左边字符。
  • 用法为%substr*

例如:

1
2
str='http://www.你的域名.com/cut-string.html'
echo ${str%/*}

得到的结果为http://www.你的域名.com,即删除从右边开始到第一个"/"及其右边所有字符

使用 %% 号操作符

  • 用途是从右边开始删除最后一次出现子字符串即其右边字符,保留左边字符。
  • 用法为%%substr*

例如:

1
2
str='http://www.你的域名.com/cut-string.html'
echo ${str%%/*}

得到的结果为http://www.你的域名.com,即删除从右边开始到最后一个"/"及其右边所有字符

使用 # 号操作符

  • 用途是从左边开始删除第一次出现子字符串即其左边字符,保留右边字符。
  • 用法为#*substr

例如:

1
2
str='http://www.你的域名.com/cut-string.html'
echo ${str#*//}

得到的结果为www.你的域名.com/cut-string.html,即删除从左边开始到第一个”//“及其左边所有字符

使用 ## 号操作符

  • 用途是从左边开始删除最后一次出现子字符串即其左边字符,保留右边字符。
  • 用法为##*substr

例如:

1
2
str='http://www.你的域名.com/cut-string.html'
echo ${str##*/}

得到的结果为cut-string.html,即删除最后出现的”/“及其左边所有字符

缺省值替换的详细使用方式

从左边第几个字符开始以及字符的个数

  • 用法为:start:len

例如:

1
2
3
4
str='http://www.你的域名.com/cut-string.html'
echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:

从左边第几个字符开始一直到结束

  • 用法为:start

例如:

1
2
3
4
str='http://www.你的域名.com/cut-string.html'
echo ${var:7}
其中的 7 表示左边第7+1个字符开始
结果是:www.你的域名.com/cut-string.html

从右边第几个字符开始以及字符的个数

  • 用法:0-start:len

例如:

1
2
3
4
str='http://www.你的域名.com/cut-string.html'
echo ${str:0-15:10}
其中的 0-15 表示右边算起第15个字符开始,10 表示字符的个数。
结果是:cut-string

从右边第几个字符开始一直到结束

  • 用法:0-start

例如:

1
2
3
4
5
str='http://www.你的域名.com/cut-string.html'
echo ${str:0-4}
其中的 0-4 表示右边算起第4个字符开始,10 表示字符的个数。
结果是:html
注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)