符號 | 釋義 |
---|---|
* | 通配符,用于匹配字符串將被刪除的子串 |
. | 分割符,可以為任意一個(gè)或多個(gè)字符 |
% | 從右向左匹配 |
# | 從左向右匹配 |
/ | 表示替換 |
% # / | 非貪婪匹配,即匹配符合通配符的最短結(jié)果 |
% ## // | 貪婪匹配,即匹配符合通配符的最長結(jié)果 |
示例 | 含義 |
---|---|
${#VALUE} | 計(jì)算VALUE字符串的字符數(shù)量 |
${VALUE%.*} 或 ${VALUE%%.*} | 刪除VALUE字符串中以分隔符"."匹配的右側(cè)字符,保留左側(cè)字符 |
${VALUE#*.} 或 ${VALUE##*.} | 刪除VALUE字符串中以分隔符"."匹配的左側(cè)字符,保留右側(cè)字符 |
${VALUE/OLD/NEW} 或 ${VALUE//OLD/NEW} | 用NEW子串替換VALUE字符串中匹配的OLD子串 |
2.2 應(yīng)用實(shí)例
定義變量name=odysee_odysee
計(jì)算VALUE字符串的字符數(shù)量
echo ${#name} # 輸出結(jié)果 13
刪除VALUE字符串中以分隔符"."匹配的右側(cè)字符,保留左側(cè)字符
# 非貪婪匹配 echo ${name%y*} # 輸出結(jié)果 odysee_od # 貪婪匹配 echo ${name%%y*} # 輸出結(jié)果 od
刪除VALUE字符串中以分隔符"."匹配的左側(cè)字符,保留右側(cè)字符
# 非貪婪匹配 echo ${name#*y} # 輸出結(jié)果 see_odysee # 貪婪匹配 echo ${name##*y} # 輸出結(jié)果 see
用NEW子串替換VALUE字符串中匹配的OLD子串
# 非貪婪匹配 echo ${name/o/O} #輸出結(jié)果 Odysee_odysee # 貪婪匹配 echo ${name//o/O} #輸出結(jié)果 Odysee_Odysee
3. 字符串截取
3.1 命令說明
示例 | 含義 |
---|---|
${VALUE:POSITION} | 在字符串VALUE中,從位置POSITION開始提取子串(從左到右匹配) |
${VALUE:POSITION:LENGTH} | 在字符串VALUE中,從位置POSITION開始提取長度為LENGTH的子串(從左到右匹配) |
${VALUE:0-OFFSET} | 在字符串VALUE中,從右到左截取OFFSET個(gè)字符 |
${VALUE:0-OFFSET:LENGTH} | 在字符串VALUE中,從右到左截取OFFSET個(gè)字符的前LENGTH個(gè) |
3.2 應(yīng)用實(shí)例
定義變量name=mynameisodysee
在字符串name中,從位置2開始提取子串(從左到右匹配)
echo ${name:2} # 輸出結(jié)果 nameisodysee
在字符串name中,從位置2開始提取長度為4的子串(從左到右匹配)
echo ${name:2:4} # 輸出結(jié)果 name
在字符串name中,從右到左截取8個(gè)字符
echo ${name:0-8} # 輸出結(jié)果 isodysee
在字符串name中,從右到左截取8個(gè)字符的前兩個(gè)
echo ${name:0-8:2} # 輸出結(jié)果 is
定義變量string=abc12342341 ,以下為截取示例
echo ${string:4} # 從第4位開始截取后面所有字符串,輸出結(jié)果:2342341 echo ${string:3:3} # 從第3位開始截取后面3位,輸出結(jié)果:123 echo ${string:3:6} #從第3位開始截取后面6位,輸出結(jié)果:123423 echo ${string: -4} #截取后4位,輸出結(jié)果:2341 echo ${string:(-4)} #同上 expr substr $string 3 3 #從第3位開始截取后面3位,輸出結(jié)果123
定義變量str="abcdef",以下為截取示例
expr substr "$str" 1 3 # 從第一個(gè)位置開始取3個(gè)字符,輸出結(jié)果:abc expr substr "$str" 2 5 # 從第二個(gè)位置開始取5個(gè)字符,輸出結(jié)果:bcdef expr substr "$str" 4 5 # 從第四個(gè)位置開始取5個(gè)字符,輸出結(jié)果:def echo ${str:2} # 從第二個(gè)位置開始提取字符串,輸出結(jié)果:bcdef echo ${str:2:3} # 從第二個(gè)位置開始提取3個(gè)字符,輸出結(jié)果:bcd echo ${str:(-6):5} # 從倒數(shù)第二個(gè)位置向左提取字符串,輸出結(jié)果:abcde echo ${str:(-4):3} # 從倒數(shù)第二個(gè)位置向左提取6個(gè)字符,輸出結(jié)果:cde
4. 判斷變量的值
4.1 命令說明
示例 | 含義 |
---|---|
${string-DEFAULT} | 如果string變量未定義,返回值為DEFAULT的值,否則返回變量的值 |
${string:-DEFAULT} | 如果string變量未定義,或者其值為空,返回值為DEFAULT的值,否則返回變量的值 |
${string=DEFAULT} | 如果string變量未定義,返回值為DEFAULT的值,并將DEFAULT賦值給string,否則返回變量的值 |
${string:=DEFAULT} | 如果string變量未定義,或者其值為空,返回值為DEFAULT的值, 并將DEFAULT賦值給string,否則返回變量的值 |
${string+DEFAULT} | 如果string已賦值,其值用DEFAULT替換,否則不進(jìn)行任何替換 |
${string:+DEFAULT} | 如果string已賦值,其值用DEFAULT替換,否則不進(jìn)行任何替換 |
${string?ERR_MSG} | 當(dāng)變量未被定義時(shí),將ERR_MSG消息發(fā)送到標(biāo)準(zhǔn)錯(cuò)誤輸出 |
${string:?ERR_MSG} | 當(dāng)變量未被賦值時(shí),將ERR_MSG消息發(fā)送到標(biāo)準(zhǔn)錯(cuò)誤輸出 |
4.2 應(yīng)用實(shí)例
${string-DEFAULT}:如果string變量未定義,返回值為DEFAULT的值,否則返回變量的值
# 未定義string變量 echo ${string-string 變量未定義} # 輸出結(jié)果:string 變量未定義 # 定義string變量,但值為空(會返回空值) string= echo ${string-string 變量未定義} # 輸出結(jié)果為空 # 定義string變量并賦值 string=test echo ${string-string 變量未定義} # 輸出結(jié)果:test
${string:-DEFAULT}:如果string變量未定義,或者其值為空,返回值為DEFAULT的值,否則返回變量的值
# 未定義string變量 echo ${string:-string 變量未定義} # 輸出結(jié)果:string 變量未定義 # 定義string變量,但值為空 string= echo ${string:-string 變量值為空} # 輸出結(jié)果:string 變量值為空 # 定義string變量并賦值 string=test echo ${string:-string 變量值為空} # 輸出結(jié)果:test
${string=DEFAULT}:如果string變量未定義,返回值為DEFAULT的值,并將DEFAULT賦值給string,否則返回變量的值
# 未定義string變量 echo ${string=123} # 輸出結(jié)果:123 echo ${string} # 輸出結(jié)果:123 # 定義string變量,但值為空(會返回空值) string= echo ${string=123} # 輸出結(jié)果為空 echo ${string} # 定義string變量并賦值 string=test echo ${string=123} # 輸出結(jié)果:test echo ${string} # 輸出結(jié)果:test
${string:=DEFAULT}:如果string變量未定義,或者其值為空,返回值為DEFAULT的值,并將DEFAULT賦值給string,否則返回變量的值
# 未定義string變量 echo ${string:=123} # 輸出結(jié)果:123 echo ${string} # 輸出結(jié)果:123 # 定義string變量,但值為空 string= echo ${string:=123} # 輸出結(jié)果:123 echo ${string} # 輸出結(jié)果:123 #定義string變量并賦值 string=test echo ${string:=123} # 輸出結(jié)果:test echo ${string} # 輸出結(jié)果:test
${string+DEFAULT}:如果string已賦值,其值用DEFAULT替換,否則不進(jìn)行任何替換
# 未定義string變量 echo ${string+123} # 輸出結(jié)果為空 echo ${string} # 輸出結(jié)果為空 # 定義string變量,但值為空 string= echo ${string+123} # 輸出結(jié)果:123 echo ${string} # 輸出結(jié)果為空 # 定義string變量并賦值 string=test echo ${string+123} # 輸出結(jié)果:123 echo ${string} # 輸出結(jié)果:test
${string:+DEFAULT}:如果string已賦值,其值用DEFAULT替換,否則不進(jìn)行任何替換
# 未定義string變量 echo ${string:+123} # 輸出結(jié)果為空 echo ${string} # 輸出結(jié)果為空 # 定義string變量,但值為空 string= echo ${string:+123} # 輸出結(jié)果為空 echo ${string} # 輸出結(jié)果為空 # 定義string變量并賦值 string=test echo ${string:+123} # 輸出結(jié)果:123 echo ${string} # 輸出結(jié)果:test
${string?ERR_MSG}:當(dāng)變量未被定義時(shí),將ERR_MSG消息發(fā)送到標(biāo)準(zhǔn)錯(cuò)誤輸出
# 未定義string變量 echo ${string?輸出錯(cuò)誤信息} # 輸出結(jié)果:-bash: string: 輸出錯(cuò)誤信息 echo ${string} # 輸出結(jié)果為空 # 定義string變量,但值為空 string= echo ${string?輸出錯(cuò)誤信息} # 輸出結(jié)果為空 echo ${string} # 輸出結(jié)果為空 # 定義string變量并賦值 string=test echo ${string?輸出錯(cuò)誤信息} # 輸出結(jié)果:test echo ${string} # 輸出結(jié)果:test
${string:?ERR_MSG}:當(dāng)變量未被賦值時(shí),將ERR_MSG消息發(fā)送到標(biāo)準(zhǔn)錯(cuò)誤輸出
# 未定義string變量 echo ${string:?輸出錯(cuò)誤信息} # 輸出結(jié)果:-bash: string: 輸出錯(cuò)誤信息 echo ${string} # 輸出結(jié)果為空 # 定義string變量,但值為空 string= echo ${string:?輸出錯(cuò)誤信息} # 輸出結(jié)果:-bash: string: 輸出錯(cuò)誤信息 echo ${string} # 輸出結(jié)果為空 # 定義string變量并賦值 string=test echo ${string:?輸出錯(cuò)誤信息} # 輸出結(jié)果:test echo ${string} # 輸出結(jié)果:test
5. 獲取字符串長度
# 定義變量string=abc12342341 echo ${#string} # 輸出結(jié)果 11 expr length $string # 輸出結(jié)果 11 expr "$string" : ".*" # 分號二邊要有空格,這里的:根match的用法差不多
6. 獲取字符串所在位置
# 定義變量str="abc" expr index $str "a" # 輸出結(jié)果 1 expr index $str "b" # 輸出結(jié)果 2 expr index $str "x" # 輸出結(jié)果 0 expr index $str "" # 輸出結(jié)果 0
7. 獲取從字符串開頭到子串的最大長度
# 定義變量string=abc12342341 expr match $string 'abc.*3' # 輸出結(jié)果 9
8. 顯示匹配的內(nèi)容
# 定義變量string=abc12342341 expr match $string '\([a-c]*[0-9]*\)' # 輸出結(jié)果 abc12342341 expr $string : '\([a-c]*[0-9]\)' # 輸出結(jié)果 abc1 expr $string : '.*\([0-9][0-9][0-9]\)' # 輸出結(jié)果 341 顯示括號中匹配的內(nèi)容
9. 顯示不匹配的內(nèi)容
# 定義變量string=abc12342341 echo ${string#a*3} # 從$string左邊開始,去掉最短匹配子串,輸出結(jié)果:42341 echo ${string#c*3} # 這樣什么也沒有匹配到,輸出結(jié)果:abc12342341 echo ${string#*c1*3} # 從$string左邊開始,去掉最短匹配子串,輸出結(jié)果:42341 echo ${string##a*3} # 從$string左邊開始,去掉最長匹配子串,輸出結(jié)果:41 echo ${string%3*1} # 從$string右邊開始,去掉最短匹配子串,輸出結(jié)果:abc12342 echo ${string%%3*1} # 從$string右邊開始,去掉最長匹配子串,輸出結(jié)果:abc12 # 定義變量str="abbc,def,ghi,abcjkl" echo ${str#a*c} # 輸出結(jié)果:def,ghi,abcjkl 一個(gè)井號(#) 表示從左邊截取掉最短的匹配 (這里把a(bǔ)bbc字串去掉) echo ${str##a*c} # 輸出結(jié)果:jkl 兩個(gè)井號(##) 表示從左邊截取掉最長的匹配 (這里把a(bǔ)bbc,def,ghi,abc字串去掉) echo ${str#"a*c"} # 輸出結(jié)果:abbc,def,ghi,abcjkl 因?yàn)閟tr中沒有"a*c"子串 echo ${str##"a*c"} # 輸出結(jié)果:abbc,def,ghi,abcjkl 同理 echo ${str#*a*c*} # 輸出結(jié)果:空 echo ${str##*a*c*} # 輸出結(jié)果:空 echo ${str#d*f} # 輸出結(jié)果:abbc,def,ghi,abcjkl, echo ${str#*d*f} # 輸出結(jié)果:ghi,abcjkl echo ${str%a*l} # 輸出結(jié)果:abbc,def,ghi 一個(gè)百分號(%)表示從右邊截取最短的匹配 echo ${str%%b*l} # 輸出結(jié)果:a 兩個(gè)百分號表示(%%)表示從右邊截取最長的匹配 echo ${str%a*c} # 輸出結(jié)果:abbc,def,ghi,abcjkl # 這里要注意,必須從字符串的第一個(gè)字符開始,或者從最后一個(gè)開始,可以這樣記憶, 井號(#)通常用于表示一個(gè)數(shù)字,它是放在前面的;百分號(%)卸載數(shù)字的后面; 或者這樣記憶,在鍵盤布局中,井號(#)總是位于百分號(%)的左邊(即前面)
10. 去掉字符串末尾的字符
使用df -Th獲取磁盤信息,并將使用率賦給變量來與閾值進(jìn)行對比,如果存在%號無法進(jìn)行對比,所以需要去掉變量中的%號,可以使用${var%?}的格式來去掉最后一個(gè)字符
#!/bin/bash root_usage=$(df -TPh | grep -w "/" | awk '{print $6}') echo ${root_usage%?}
到此這篇關(guān)于Linux 使用shell腳本處理字符串的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)shell處理字符串內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:黔南 河北 常州 河池 通遼 隴南 黔南 淮南
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux 使用shell腳本處理字符串的實(shí)現(xiàn)》,本文關(guān)鍵詞 Linux,使用,shell,腳本,處理,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。