Linux終端中的字符串使用總結(截取,切片,查找替換,轉換,變量賦值等)

一、基於模式匹配截取字符串

一、#、##號截取

     #號截取,從左邊開始,以一個出現的分隔符(最左)爲準,刪除左邊字符。spa

     ##號截取,從左邊開始,以最後(最右)一個分隔符爲準,刪除左邊字符。3d

str='hello world'
echo ${str#*l}
echo ${str##*l}
echo ${str##*llo}

#*l 表示從左邊開始刪除第一個出現的w左邊的全部字符。##*l 表示從左邊開始刪除最後一個出現的w左邊的全部字符。code

二、%、%%號截取

     %號截取,從右邊開始,以一個出現的分隔符(最右)爲準,刪除右邊字符。blog

     %%號截取,從右邊開始,以最後一個出現的分隔符(最左)爲準,刪除右邊字符。字符串

str='hello world'
echo ${str%l*}
echo ${str%%l*}
echo ${str%lo*}

%l* 表示從右邊開始刪除第一個出現的w右邊的全部字符。%%l* 表示從右邊開始刪除最後一個出現的w右邊的全部字符。class

二、字符串切片

字符串切片:${var:offset:length}awk

一、當length爲正數

str='hello world'
echo ${str:0:7} #從第0個字符開始,截取7個字符。
echo ${str:7}  #從左邊開始第七個字符,一直到結束。
echo ${str:0-7:2} #從右邊開始第七個字符,截取2個字符。
echo ${str:0-7:3} #從右邊開始第七個字符,截取3個字符。
echo ${str:0-7} #從右邊開始第七個字符,一直到結束。

二、當length爲負數

str='hello world'
echo ${str:0:-2} #從第0個字符開始,一直到倒數第二個字符。
echo ${str:0-7:-2} #從右往做數的第七個字符開始,一直到倒數第二個字符。
echo ${str:4:-2} #從第四個字符開始,一直到倒數第二個字符。
echo ${str: -2} #從右邊開始(倒數)第二個字符,一直到最後。注意冒號後有空格,等效於${str:0-2}。

三、查找替換字符串

${var/pattern/substi}:查找var所表示的字串中,第一次被Pattern匹配到的字串,並以substi替換之。變量

${var//patten/substi}:查找var所表示的字串中,全部被Pattern匹配到的字串,並以substi替換之。方法

${var/#pattern/substi}:以行首錨定的方式將pattern匹配至var所表示的字串上,若是能匹配,則以substi替換之。im

${var/%pattern/substi}:以行尾錨定的方式將pattern匹配至var所表示的字串上,若是能匹配,則以substi替換之。
以上都可使用?, *元字符。

str='hello world'
echo ${str/l/e}
echo ${str//l/e}
echo ${str/#l/e}
echo ${str/#hel/e}
echo ${str/%ld/e}
echo ${str/h*o/hi}
echo ${str/h??/eee}

 

 ${var/pattern}:替換爲空,即刪除pattern匹配到的第一次出現。
 ${var//pattern}: 刪除pattern匹配到的全部出現。
 ${var/#pattern}
 ${var/%pattern}

使用方法同上。

四、字符串大小寫轉換

${var^^}:小寫-->大寫

${var,,}:大寫-->小寫

str='hello WORLD'
echo ${str^^}
echo $str | tr '[a-z]' '[A-Z]'
echo ${str,,}
echo $str | tr '[A-Z]' '[a-z]'

大小寫轉換的方式不少,還包括 declare、awk等。

五、變量賦值

有無冒號存在細微差異

一、有冒號

一般用來表示變量是否有值(定義且非空)。

${var:-word}: 若是var爲空或未設置,那麼返回word;不然,則返回var中的值; 

${var:=word}:若是var爲空或未設置,那麼返回word,而且將word賦值給var;不然,返回var中的值;

${var:?err_info}:若是var爲空或未設置,那麼返回錯誤信息;不然,則返回var自身的值;

${var:+word}:若是var自身有正常數據,則返回word;

str='hello world'
echo ${str:-word}
str=''
echo ${str:-word}
echo ${str:=word}
echo $str
echo ${str:?error}
str=''
echo ${str:?error}
echo $? #查看上條命令是否返回錯誤信息
echo ${str:+word}
str='asdas'
echo ${str:+word}

二、無冒號

若去掉冒號則表示變量爲空也視爲變量有正常值存在。一般用來表示變量是否認義。

str='hello world'
echo ${str-word}
str=''
echo ${str-word}
echo ${strr-word}
echo $str
echo ${str?error}
echo ${strr?error}
echo $? #查看上條命令是否返回錯誤信息

相關文章
相關標籤/搜索