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


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

1、#、##號截取

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

     ##號截取,從左邊開始,以最后(最右)一個分隔符為准,刪除左邊字符。

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

#*l 表示從左邊開始刪除第一個出現的w左邊的所有字符。##*l 表示從左邊開始刪除最后一個出現的w左邊的所有字符。

2、%、%%號截取

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

     %%號截取,從右邊開始,以最后一個出現的分隔符(最左)為准,刪除右邊字符。

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

%l* 表示從右邊開始刪除第一個出現的w右邊的所有字符。%%l* 表示從右邊開始刪除最后一個出現的w右邊的所有字符。

2、字符串切片

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

1、當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} #從右邊開始第七個字符,一直到結束。

2、當length為負數

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

3、查找替換字符串

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

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

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

${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}

使用方法同上。

4、字符串大小寫轉換

${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等。

5、變量賦值

有無冒號存在細微差別

1、有冒號

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

${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}

2、無冒號

若去掉冒號則表示變量為空也視為變量有正常值存在。通常用來表示變量是否定義。

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


免責聲明!

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



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