Shell字串擷取

2021-09-27 01:42:02 字數 2305 閱讀 5030

這種方式需要兩個引數: 1.起始位置 2.擷取長度

既然需要指定起始位置,那麼就涉及到計數方向的問題,到底是從字串左邊開始計數,還是從字串右邊開始計數,答案是shell同時支援兩種計數方式

從左邊開始計數,擷取字串的格式如下

$

其中,string為要擷取的字串,start是起始位置(從左邊開始,從0開始計數),length是要擷取的長度(省略的話表示直到字串的末尾)

例如:

#! /bin/bash

url=""

echo $

結果為

再如:

#! /bin/bash

url=""

echo $ #省略length,擷取到字串末尾

結果為.com

從右邊開始計數,擷取字串的格式如下

$

同從左邊開始計數相比,這種格式僅僅多了0-,這是固定的寫法,專門用來標識從字串右邊開始計數

需要注意下面兩點:

例如:

#! /bin/bash

url=""

echo $

結果為baidu。從右邊數,b是第9個字元

再如:

#! /bin/bash

url=""

echo $ #省略length,直接擷取到字串末尾

結果為baidu.com

這種擷取方式無法指定字串長度,只能從指定字元(子字串)擷取到字串末尾。shell 可以擷取指定字元(子字串)右邊的所有字元,也可以擷取左邊的所有字元。

使用#號可以擷取指定字元(子字串)右邊的所有字元,具體格式如下:

$

其中,string表示要擷取的字串,chars是指定的字元(或子字串),*是萬用字元,表示任意長度的字串,*chars連起來可理解為忽略左邊的所有字元,直到遇到chars(chars不會被擷取)

例如:

#! /bin/bash

url=""

echo $

結果為www.baidu.com

如果不需要忽略chars左邊的字元,那麼也可以不寫*,例如

#! /bin/bash

url=""

echo $

結果為www.baidu.com

注意:以上寫法遇到第乙個匹配的字元(子字串)就結束了。

例如

#! /bin/bash

url="/index.html"

echo $

結果為/www.baidu.com/index.html。url字串中有三個/,輸出結果表明,shell遇到第乙個/就匹配結束了

如果希望直到最後乙個指定字元(子字串)再匹配結束,那麼可以使用##,具體格式為:

$

例如:

#! /bin/bash

url="/index.html"

echo $ #結果為/www.baidu.com/index.html

echo $ #結果為index.html

str="---aa+++aa@@@"

echo $ #結果為+++aa@@@

echo $ #結果為@@@

使用%號可以擷取指定字元(或者子字串)左邊的所有字元,具體格式如下:

$
請注意*的位置,因為要擷取chars左邊的字元,而忽略chars右邊的字串,所以*應該位於chars右側,其他方面%#號的用法相同,這裡不再贅述,僅舉例說明

#! /bin/bash

url="/index.html"

echo $ #結果為

echo $ #結果為http:

str="---aa+++aa@@@"

echo $ #結果為---aa+++

echo $ #結果為---

參考位址

Shell字串擷取

一 linux shell 擷取字元變數的前8位,有方法如下 substr var 開始擷取位 擷取長度 1.expr substr a 1 8 2.echo a awk 3.echo a cut c1 8 4.echo 5.expr a 6.echo a dd bs 1 count 8 2 dev...

shell字串擷取

filed under shell shell字串的擷取的問題 一 linux shell 擷取字元變數的前8位,有方法如下 1.expr substr a 1 8 2.echo a awk 3.echo a cut c1 8 4.echo 5.expr a 6.echo a dd bs 1 cou...

shell字串擷取

假設有變數 var echo 其中 var 是變數名,號是運算子,表示從左邊開始刪除第乙個 號及左邊的所有字元 即刪除 http 結果是 www.aaa.com 123.htmecho 表示從左邊開始刪除最後 最右邊 乙個 號及左邊的所有字元 即刪除 結果是 123.htmecho 表示從右邊開始,...