linux shellLinux学习与应用技巧

linux中的字符截取

2021-09-16  本文已影响0人  一只烟酒僧

参考链接:http://c.biancheng.net/view/1120.html

概括:

${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 左边的所有字符。

这里主要讲一下#和%的使用

截去的角度上说,总结为:左#右%
截取的角度上说,反过来。

  1. 使用 # 号截取右边字符
    使用#号可以截取指定字符(或者子字符串)右边的所有字符,具体格式如下:
${string#*chars}

其中,string 表示要截取的字符,chars 是指定的字符(或者子字符串),*是通配符的一种,表示任意长度的字符串。
*chars连起来使用的意思是:忽略左边的所有字符,直到遇见 chars(chars 不会被截取)。

注意,以上写法遇到第一个匹配的字符(子字符串)就结束了。例如:
url="http://c.biancheng.net/index.html"
echo ${url#*/}
结果为/c.biancheng.net/index.html。url 字符串中有三个/,输出结果表明,Shell 遇到第一个/就匹配结束了。

如果希望直到最后一个指定字符(子字符串)再匹配结束,那么可以使用##,具体格式为:

${string##*chars}

#例子
url="http://c.biancheng.net/index.html"
echo ${url#*/}    #结果为 /c.biancheng.net/index.html
echo ${url##*/}   #结果为 index.html

#例子2
str="---aa+++aa@@@"
echo ${str#*aa}   #结果为 +++aa@@@
echo ${str##*aa}  #结果为 @@@

2.使用 % 截取左边字符
使用%号可以截取指定字符(或者子字符串)左边的所有字符,具体格式如下:

${string%chars*}

请注意*的位置,因为要截取 chars 左边的字符,而忽略 chars 右边的字符,所以*应该位于 chars 的右侧。其他方面%和#的用法相同,这里不再赘述,仅举例说明:

#!/bin/bash

url="http://c.biancheng.net/index.html"
echo ${url%/*}  #结果为 http://c.biancheng.net
echo ${url%%/*}  #结果为 http:

str="---aa+++aa@@@"
echo ${str%aa*}  #结果为 ---aa+++
echo ${str%%aa*}  #结果为 ---
上一篇下一篇

猜你喜欢

热点阅读