美文网首页
Bash基础语法学习(二)-字符串

Bash基础语法学习(二)-字符串

作者: summer_code | 来源:发表于2022-07-06 09:15 被阅读0次

    1.字符串长度

    mystring=akdjakdaldjadklja
    echo ${#mystring}
    17
    //大括号{}是必需的,否则 Bash 会将$#理解成脚本的参数个数,将变量名理解成文本。
    echo $#
    0
    

    2.子字符串
    字符串提取子串的语法如下。

    ${varname:offset:length}
    
    count=frogfootman
    echo ${count:4:4}
    foot
    echo ${count:0:4}
    frog
    //这种语法不能直接操作字符串,只能通过变量来读取字符串,并且不会改变原始字符串。
    //如果省略length,则从位置offset开始,一直返回到字符串的结尾。
    echo ${count:4}
    footman
    
    foot="abcdefghijk"
    echo ${foot: -2} //从倒数第2个字符开始截取,即从j截取2个字符 注:负数前要空格
    jk
    echo ${foot: -5:3} //从倒数第5个字符开始截取,取3个字符 即:从g截取
    ghi
    echo ${foot: -5:-2} //从倒数第5个字符截取,截取后去掉末尾2个字符, 即:ghijk 去掉 jk
    ghi
    echo ${foot: -5:-1}  //从倒数第5个字符截取,截取后去掉末尾1个字符,
    ghij
    

    3.搜索与替换
    (1)字符串头部的模式匹配。

    以下两种语法可以检查字符串开头,是否匹配给定的模式。如果匹配成功,就删除匹配的部分,返回剩下的部分。原始变量不会发生变化

    # 如果 pattern 匹配变量 variable 的开头,
    # 删除最短匹配(非贪婪匹配)的部分,返回剩余部分
    ${variable#pattern}
    
    # 如果 pattern 匹配变量 variable 的开头,
    # 删除最长匹配(贪婪匹配)的部分,返回剩余部分
    ${variable##pattern}
    
    mypath=/home/cam/book/long.file.name
    echo ${mypath#/*/}
    cam/book/long.file.name
    echo ${mypath##/*/}
    long.file.name
    //匹配的模式是/*/,其中*可以匹配任意数量的字符,所以最短匹配是/home/,最长匹配是/home/cam/book/。
    echo ${mypath##*/}    //*/会匹配目录部分,相当于删除文件路径
    long.file.name
    //例2
    phone="555-456-1414"
    echo ${phone#*-}   //这里的*-会匹配到 555-
    456-1414
    echo ${phone##*-} //这里的*-会匹配到 555-456-
    1414
    echo ${phone#333}  //这里匹配不成功会返回原字符串
    555-456-1414
    

    如果要将头部匹配的部分,替换成其他内容,采用下面的写法。

    # 模式必须出现在字符串的开头
    ${variable/#pattern/string}
    echo ${phone/#555/400}
    400-456-1414
    

    (2)字符串尾部的模式匹配。
    以下两种语法可以检查字符串结尾,是否匹配给定的模式。如果匹配成功,就删除匹配的部分,返回剩下的部分。原始变量不会发生变化。

    # 如果 pattern 匹配变量 variable 的结尾,
    # 删除最短匹配(非贪婪匹配)的部分,返回剩余部分
    ${variable%pattern}
    
    # 如果 pattern 匹配变量 variable 的结尾,
    # 删除最长匹配(贪婪匹配)的部分,返回剩余部分
    ${variable%%pattern
    
    mypath=/home/cam/book/long.file.name
    echo ${mypath%.*}  //从尾部往前匹配,当找到第一个.时就返回
    /home/cam/book/long.file
    echo ${mypath%%.*}
    /home/cam/book/long
    //匹配模式是.*,其中*可以匹配任意数量的字符,所以最短匹配是.name,最长匹配是.file.name。
    echo ${mypath%/*}
    /home/cam/book
    //后缀名替换
    echo ${mypath%.name}.text
    /home/cam/book/long.file.text
    

    (3)任意位置的模式匹配。
    以下两种语法可以检查字符串内部,是否匹配给定的模式。如果匹配成功,就删除匹配的部分,换成其他的字符串返回。原始变量不会发生变化

    # 如果 pattern 匹配变量 variable 的一部分,
    # 最长匹配(贪婪匹配)的那部分被 string 替换,但仅替换第一个匹配
    ${variable/pattern/string}
    
    # 如果 pattern 匹配变量 variable 的一部分,
    # 最长匹配(贪婪匹配)的那部分被 string 替换,所有匹配都替换
    ${variable//pattern/string}
    

    4.改变大小写

    # 转为大写
    ${varname^^}
    
    # 转为小写
    ${varname,,}
    

    相关文章

      网友评论

          本文标题:Bash基础语法学习(二)-字符串

          本文链接:https://www.haomeiwen.com/subject/niidbrtx.html