1. 程式人生 > >linux shell 字串獲取長度、替換、擷取、刪除等操作(持續更新)

linux shell 字串獲取長度、替換、擷取、刪除等操作(持續更新)

測試字串:str=/xxx/file.txt.gz

一、長度、變數:

說明

表示式

例子

結果

獲取長度

${#string}

${#str}

16

列出所有以prefix開頭的變數

${!prefix*}、${!prefix@}

${!st@}

str

測試${!prefix*}、${!prefix@}沒什麼區別,如果大神知道區別,留言,膜拜!
str111=/xxx/file.txt.gz
str222=/xxx/file.txt.gz

echo ${!str@} #結果:str111 str222
echo ${!str*} #結果:str111 str222

二、擷取、刪除

說明

表示式

例子

結果

從position(從0開始,負表示倒數,下同)開始擷取

${string:position}

${str:1}

xxx/file.txt.gz

position開始擷取,取length長

${string:position:length}

${str:1:3}

xxx

從第index(從1開始)開始,取number個

`expr substr $string index number`

`expr substr $str 2 3`

xxx

從左邊開始,刪最短匹配regex

${string#regex }

${str#*.}

txt.gz

從左邊開始,刪最長匹配regex

${string##regex }

${str##*.}

gz

從右邊開始,刪最長匹配regex

${string%%regex }

${str%%.*}

/xxx/file

從右邊開始,刪最短匹配regex

${string%regex }

${str%.*}

/xxx/file.txt

刪除操作很有用:比如取目錄、檔名、字尾等

dir=${str%/*} 在絕對路徑str取目錄

filename=${str##*/}  取檔名

suffix=${str##*.} 取字尾

很方便、很簡潔,有木有~~~~

三、匹配

說明

表示式

例子

結果

從頭匹配substring

`expr match $string '\(substring\)'`

`expr match $str '\(/xx\)'`

/xx

隨便位置匹配substring

`expr match $string '.*\(substring/\)'`

`expr match $str '.*\(xx/\)'`

xx/

從頭匹配substring,輸出匹配數量

`expr match $string 'substring'`

`expr match $str '/xx'`

3

隨便位置匹配substring,輸出匹配數量

`expr match $ string '.* 'substring''`

`expr match $str '.*xx/'`

5

四、替換

說明

表示式

例子

結果

在string中,用newsubstr替換oldsubstr一次

${string/oldsubstr/newsubstr}

${str/./-}

/xxx/file-txt.gz

在string中,用newsubstr替換所有oldsubstr

${string//oldsubstr/newsubstr}

${str//./-}

/xxx/file-txt-gz

在string中,以oldsubstr開頭部分被newsubstr替換

${string/#oldsubstr/newsubstr}

${str/#\/x/y}

yxx/file.txt.gz

在string中,以oldsubstr結尾部分被newsubstr替換

${string/%oldsubstr/newsubstr}

${str/%gz/tar}

/xxx/file.txt.tar