shell 表达式截取字符串

  • 汇总

    # 解析
    $ 从左到右,从指定的下标开始截取指定长度字符
    $ 从左到右,截取从指定下标到字符串最后的所有字符
    $ 从右到左, 从指定的右侧下标开始, 往右截取指定长度字符
    $ 从右到左, 截取从指定下标到右侧最后的字符
    $ 从左到右, 从字符串第一次出现标识开始, 截取标识右边所有的字符
    $ 从左到右, 从字符串最后一次出现标识开始, 截取标识右边所有的字符
    $ 从右到左, 从字符串第一次出现标识开始, 截取标识左边所有的字符
    $ 从右到左, 从字符串最后一次出现标识开始, 截取标识左边所有的字符
  • 注意

    • 从左边开始计数时,起始下标是 0;从右边开始计数时,起始下标是 1
    • 不管从哪边开始计数,截取方向都是从左到右
  • ${字符串: 指定下标:截取长度}, ${字符串: 指定下标}:

    path='/root/test/abc.txt'
    sub1=${path: 0:5}   #从第一个字符(下标0)开始,截取5个字符
    sub2=${path: 6:4}   #从第七个字符(下标6), 截取4个字符
    sub3=${path: 6}
    
    echo $sub1
    echo $sub2
    echo $sub3
    

    结果

    /root
    test
    test/abc.txt
    
  • ${字符串: 0-右起指定下标:截取长度}, $

    path='/root/test/abc.txt'
    r_sub1=${path: 0-3: 3}
    r_sub2=${path: 0-7: 3}
    r_sub3=${path: 0-12}
    
    echo $r_sub1
    echo $r_sub2
    echo $r_sub3
    

    结果

    txt
    abc
    test/abc.txt
    
  • ${字符串#标识}, ${字符串##标识}, ${字符串%标识}, ${字符串%%标识}

    path='C:/root/test/abc.txt'
    l_r_sub1=${path#*/}
    l_r_sub2=${path##*/}
    r_l_sub1=${path%/*}
    r_l_sub2=${path%%/*}
    echo $l_r_sub1
    echo $l_r_sub2
    echo $r_l_sub1
    echo $r_l_sub2
    

    结果

    root/test/abc.txt
    abc.txt
    C:/root/test
    C:
    
posted @ 2022-02-21 14:34  cc-31415926  阅读(73)  评论(0编辑  收藏  举报