Shell脚本编程之字符串切片

1. 字符串切片

1.1. 字符串切片

格式说明
${#var}返回字符串变量var的长度(字符)。
${var:offset}返回字符串变量var中从第offset个字符后面(不包括第offset个字符)的字符开始,到最后的部分。
注意:offset 的取值在0 到 ${#var}-1 之间(bash4.2后,允许为负值)。
${var:offset:number}返回字符串变量var中从第offset个字符后面(不包括第offset个字符)的字符开始,长度为number的部分。
${var: -length}取字符串的最右侧几个字符。
注意:冒号后必须有一空白字符。
${var:offset: -length}从最左侧跳过offset字符,一直向右取到距离最右侧lengh个字符之前的内容。
${var: -length:-offset}先从最右侧向左取到length个字符开始,再向右取到距离最右侧offset个字符之间的内容。
注意:-length前空格。
${#var}
        |<----------- string length ----------->|
        |---------------string------------------|
${var:offset}

                offset + 1
                       |---------- cut ---------|
        |---------------string------------------|
        |<-- offset -->|
${var:offset:number}

              offset + 1              offset + number
                       |----- cut ----|
        |---------------string------------------|
        |<-- offset -->|<-- number -->|
${var: -length}

                 ${#var} - length               ${#var}
                                |----- cut -----|
        |---------------string------------------|
                                |<-- -length -->|
${var:offset: -length}

              offset + 1        ${#var} - length
                       |- cut --|
        |---------------string------------------|
        |<-- offset -->|        |<-- -length -->|
${var: -length:-offset}

    ${#var} - length + 1        ${#var} - offset
                |----- cut -----|
        |---------------string------------------|
                |<---------- -length ---------->|
                                |<-- -offset -->|

1.2. 基于模式取子串

格式说明
${var#*word}功能:自左而右,查找var变量所存储的字符串中,第一次出现的word,删除字符串开头至第一次出现word字符串(含)之间的所有字符。
其中word可以是指定的任意字符。
${var##*word}贪婪模式;不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容。

示例

file="var/log/messages"
[root@centos7 ~]# echo ${file#*/}
log/messages
[root@centos7 ~]# echo ${file##*/}
messages
格式说明
${var%word*}功能:自右而左,查找var变量所存储的字符串中,第一次出现的word,删除字符串最后一个字符向左至第一次出现word字符串(含)之间的所有字符。
其中word可以是指定的任意字符。
${var%%word*}贪婪模式;只不过删除字符串最右侧的字符向左至最后一次出现word字符之间的所有字符。

示例

file="/var/log/messages"
[root@centos7 ~]# ${file%/*}
/var/log
url=http://www.centos.com:80
[root@centos7 ~]# ${url##*:}
80
[root@centos7 ~]# ${url%%:*}
http

1.3. 查找替换

替换说明
${var/pattern/substr}首次。查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替换之。
${var//pattern/substr}全部。查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之。
${var/#pattern/substr}行首。查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之。
${var/%pattern/substr}行尾。查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之。

1.4. 查找并删除

删除说明
${var/pattern}删除首次。删除var表示的字符串中第一次被pattern匹配到的字符串。
${var//pattern}删除全部。删除var表示的字符串中所有被pattern匹配到的字符串。
${var/#pattern}删除行首。删除var表示的字符串中所有以pattern为行首匹配到的字符串。
${var/%pattern}删除行尾。删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串。

1.5. 字符大小写转换

大小写说明
${var^^}把var中的所有小写字母转换为大写。
${var,,}把var中的所有大写字母转换为小写。

1.6. 变量赋值

变量set方式str没有被setstr为空str为非空字符串描述
${str-expr}exprnull$str
${str:-expr}exprexpr$str
${str+expr}nullexprexpr
${str:+expr}nullnullexpr
${str=expr}expr
str=expr
null$str
${str:=expr}expr
str=expr
expr
str=expr
$str类似“-”,但str会被赋值
${str?expr}expr output stderrnull$str
${str:?expr}expr output stderrexpr output stderr$str

转载于:https://www.cnblogs.com/haona_li/p/10334057.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值