• 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没有被set str为空 str为非空字符串 描述
    ${str-expr} expr null $str
    ${str:-expr} expr expr $str
    ${str+expr} null expr expr
    ${str:+expr} null null expr
    ${str=expr} expr
    str=expr
    null $str
    ${str:=expr} expr
    str=expr
    expr
    str=expr
    $str 类似“-”,但str会被赋值
    ${str?expr} expr output stderr null $str
    ${str:?expr} expr output stderr expr output stderr $str
    书山有路勤为径,学海无涯苦作舟
  • 相关阅读:
    hdu5233 Gunner II
    hdu5247 找连续数
    hdu5246 超级赛亚ACMer
    codeforces Looksery Cup 2015 C. The Game Of Parity
    Spring系列之Spring常用注解总结
    jni不通过线程c回调java的函数 --总结
    Spring声明周期的学习心得
    java web20套项目
    jsp和servlet的关系
    JavaWeb开发之四:servlet技术 黑马程序员_轻松掌握JavaWeb开发之四Servlet开发 方立勋老师视频教程相当的经典
  • 原文地址:https://www.cnblogs.com/haona_li/p/10334057.html
Copyright © 2020-2023  润新知