手机网站建设的教程视频,apache做网站,如何删除错误wordpress,福州有网站建设的公司Shell 截取字符串通常有两种方式#xff1a;从指定位置开始截取和从指定字符#xff08;子字符串#xff09;开始截取。
从指定位置开始截取
这种方式需要两个参数#xff1a;除了指定起始位置#xff0c;还需要截取长度#xff0c;才能最终确定要截取的字符串。
既然…Shell 截取字符串通常有两种方式从指定位置开始截取和从指定字符子字符串开始截取。
从指定位置开始截取
这种方式需要两个参数除了指定起始位置还需要截取长度才能最终确定要截取的字符串。
既然需要指定起始位置那么就涉及到计数方向的问题到底是从字符串左边开始计数还是从字符串右边开始计数。答案是 Shell 同时支持两种计数方式。
1) 从字符串左边开始计数
如果想从字符串的左边开始计数那么截取字符串的具体格式如下
${string: start :length}其中string 是要截取的字符串start 是起始位置从左边开始从 0 开始计数length 是要截取的长度省略的话表示直到字符串的末尾。
例如
urlc.biancheng.net
echo ${url: 2: 9}结果为biancheng。
再如
urlc.biancheng.net
echo ${url: 2} #省略 length截取到字符串末尾结果为biancheng.net。
2) 从右边开始计数
如果想从字符串的右边开始计数那么截取字符串的具体格式如下
${string: 0-start :length}同第 1) 种格式相比第 2) 种格式仅仅多了0-这是固定的写法专门用来表示从字符串右边开始计数。
这里需要强调两点
从左边开始计数时起始数字是 0这符合程序员思维从右边开始计数时起始数字是 1这符合常人思维。计数方向不同起始数字也不同。不管从哪边开始计数截取方向都是从左到右。
例如
urlc.biancheng.net
echo ${url: 0-13: 9}结果为biancheng。从右边数b是第 13 个字符。
再如
urlc.biancheng.net
echo ${url: 0-13} #省略 length直接截取到字符串末尾结果为biancheng.net。
从指定字符子字符串开始截取
这种截取方式无法指定字符串长度只能从指定字符子字符串截取到字符串末尾。Shell 可以截取指定字符子字符串右边的所有字符也可以截取左边的所有字符。
1) 使用 # 号截取右边字符
使用#号可以截取指定字符或者子字符串右边的所有字符具体格式如下
${string#*chars}其中string 表示要截取的字符chars 是指定的字符或者子字符串*是通配符的一种表示任意长度的字符串。*chars连起来使用的意思是忽略左边的所有字符直到遇见 charschars 不会被截取。
请看下面的例子
urlhttp://c.biancheng.net/index.html
echo ${url#*:}结果为//c.biancheng.net/index.html。
以下写法也可以得到同样的结果
echo ${url#*p:}
echo ${url#*ttp:}如果不需要忽略 chars 左边的字符那么也可以不写*例如
urlhttp://c.biancheng.net/index.html
echo ${url#http://}结果为c.biancheng.net/index.html。
注意以上写法遇到第一个匹配的字符子字符串就结束了。例如
urlhttp://c.biancheng.net/index.html
echo ${url#*/}结果为/c.biancheng.net/index.html。url 字符串中有三个/输出结果表明Shell 遇到第一个/就匹配结束了。
如果希望直到最后一个指定字符子字符串再匹配结束那么可以使用##具体格式为
${string##*chars}请看下面的例子
#!/bin/bashurlhttp://c.biancheng.net/index.html
echo ${url#*/} #结果为 /c.biancheng.net/index.html
echo ${url##*/} #结果为 index.html
str---aaaa
echo ${str#*aa} #结果为 aa
echo ${str##*aa} #结果为 2) 使用 % 截取左边字符
使用%号可以截取指定字符或者子字符串左边的所有字符具体格式如下
${string%chars*}请注意*的位置因为要截取 chars 左边的字符而忽略 chars 右边的字符所以*应该位于 chars 的右侧。其他方面%和#的用法相同这里不再赘述仅举例说明
#!/bin/bashurlhttp://c.biancheng.net/index.html
echo ${url%/*} #结果为 http://c.biancheng.net
echo ${url%%/*} #结果为 http:str---aaaa
echo ${str%aa*} #结果为 ---aa
echo ${str%%aa*} #结果为 ---汇总
最后我们对以上 8 种格式做一个汇总请看下表
格式说明${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 左边的所有字符。