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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM