• 字符串操作


    1. 字符串长度: ${#string}, expr length $string, expr "$string" : '.*'

    stringZ=abcABC123ABCabc

     echo ${#stringZ} # 15 
     echo `expr length $stringZ` # 15
     echo `expr "$stringZ" : '.*'` # 15

    2. 匹配字符串开头的子串长度: expr match "$string" '$substring' ;expr "$string" : '$substring'  $substring是一个正则表达式.

    stringZ=abcABC123ABCabc
    echo `expr match "$stringZ" 'abc[A-Z]*.2'` # 8
    echo `expr "$stringZ" : 'abc[A-Z]*.2'` # 8

    3. 索引: expr index $string $substring  index下标从1开始

     stringZ=abcABC123ABCabc,  echo `expr index "$stringZ" C12`  # C 字符的位置.

    注意: index其实查找的是字串中的包含的任意字符在$tring中第一次出现的位置。没有返回0.

    4. 提取子串: 下标从0开始

    ${string:position}在$string中从位置$position开始提取子串. 如果$string是"*"或者"@", 那么将会提取从位置$position开始的位置参数.从0开始

    ${string:position:length}, 在$string中从位置$position开始提取$length长度的子串.如果$string参数是"*"或"@", 那么将会从$position位置开始提取$length个位置参数, 但是由于可能没有$length个位置参数了, 那么就有几个位置参数就提取几个位置参数.

    stringZ=abcABC123ABCabc

    echo ${stringZ:0} # abcABC123ABCabc
     echo ${stringZ:1} # bcABC123ABCabc
    echo ${stringZ:7} # 23ABCabc
    echo ${stringZ:7:3} # 23A 提取子串长度为3.

    # 能不能从字符串的右边(也就是结尾)部分开始提取子串?
     echo ${stringZ:-4} # abcABC123ABCabc # 默认是提取整个字符串, 就象${parameter:-default}一样.

     echo ${stringZ:(-4)} # Cabc
     echo ${stringZ: -4} # Cabc  这样, 它就可以工作了. 使用圆括号或者添加一个空格可以"转义"这个位置参数.

    5. expr substr $string $position $length 在$string中从$position开始提取$length长度的子串.   # 以1开始计算.

     stringZ=abcABC123ABCabc
              # 123456789......
    echo `expr substr $stringZ 1 2` # ab
    echo `expr substr $stringZ 4 3` # ABC

    expr match "$string" '($substring)'  从$string的开始位置提取$substring, $substring是正则表达式.

    expr "$string" : '($substring)'  从$string的开始位置提取$substring, $substring是正则表达式.

    echo `expr match "$stringZ" '(.[b-c]*[A-Z]..[0-9])'` # abcABC1
    echo `expr "$stringZ" : '(.[b-c]*[A-Z]..[0-9])'` # abcABC1
    echo `expr "$stringZ" : '(.......)'` # abcABC1

    expr match "$string" '.*($substring)'  从$string的结尾提取$substring, $substring是正则表达式.
    expr "$string" : '.*($substring)'  从$string的结尾提取$substring, $substring是正则表达式.

    echo `expr match "$stringZ" '.*([A-C][A-C][A-C][a-c]*)'` #ABCabc
    echo `expr "$stringZ" : '.*(......)'` #ABCabc

    6. 子串削除
    ${string#substring}从$string的开头位置截掉最短匹配的$substring.
    ${string##substring}从$string的开头位置截掉最长匹配的$substring.

    ${string%substring}从$string的结尾位置截掉最短匹配的$substring.
    ${string%%substring}从$string的结尾位置截掉最长匹配的$substring.

    stringZ=abcABC123ABCabc
     echo ${stringZ#a*C} # 123ABCabc # 截掉'a'到'C'之间最短的匹配字符串.
    echo ${stringZ##a*C} # abc  # 截掉'a'到'C'之间最长的匹配字符串.

    echo ${stringZ%b*c} # abcABC123ABCa  从$stringZ的结尾位置截掉'b'到'c'之间最短的匹配.
    echo ${stringZ%%b*c} # a # 从$stringZ的结尾位置截掉'b'到'c'之间最长的匹配.

    7. 子串替换

    ${string/substring/replacement}使用$replacement来替换第一个匹配的$substring.
    ${string//substring/replacement}使用$replacement来替换所有匹配的$substring

    echo ${stringZ/abc/xyz} # xyzABC123ABCabc # 使用'xyz'来替换第一个匹配的'abc'.

    echo ${stringZ//abc/xyz} # xyzABC123ABCxyz # 用'xyz'来替换所有匹配的'abc'.

    ${string/#substring/replacement}如果$substring匹配$string的开头部分, 那么就用$replacement来替换$substring.
    ${string/%substring/replacement}如果$substring匹配$string的结尾部分, 那么就用$replacement来替换$substring.
     stringZ=abcABC123ABCabc
     echo ${stringZ/#abc/XYZ} # XYZABC123ABCabc # 用'XYZ'替换开头的'abc'.
     echo ${stringZ/%abc/XYZ} # abcABC123ABCXYZ # 用'XYZ'替换结尾的'abc'.

    AWK

     Bash脚本也可以调用awk的字符串操作功能来代替它自己内建的字符串操作.

    String=23skidoo1
        # 012345678 Bash
           # 123456789 awk
    # 注意不同的字符串索引系统:Bash的第一个字符是从'0'开始记录的.  Awk的第一个字符是从'1'开始记录的.

    echo ${String:2:4} # 位置 3 (0-1-2), 4 个字符长 # skid
     # awk中等价于${string:pos:length}的命令是substr(string,pos,length).
    15 echo | awk ' { print substr("'"${String}"'",3,4) # skid } '
    # 使用一个空的"echo"通过管道传递给awk一个假的输入, 这样就不必提供一个文件名给awk.

  • 相关阅读:
    Matlab2018 b 下载和安装激活说明
    亿图思维导图软件 Edraw MindMaster Pro 8.0.102 中文直装版全功能专业版
    中华人民共和国民法典全文及下载
    qbxt DAY3 T4
    洛谷P1972 [SDOI2009]HH的项链——题解
    洛谷P2824 [HEOI2016/TJOI2016]排序——题解
    洛谷P1966 火柴排队——题解
    逆序对小记(~dtk)
    0/1分数规划 小记
    洛谷P3199 [HNOI2009]最小圈——题解
  • 原文地址:https://www.cnblogs.com/fly-xiang-zhao/p/3701855.html
Copyright © 2020-2023  润新知