Linux使用shell腳本處理字符串的實(shí)現(xiàn)方法-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關(guān)Linux使用shell腳本處理字符串的實(shí)現(xiàn)方法的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

成都創(chuàng)新互聯(lián)公司總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有網(wǎng)站建設(shè)、成都做網(wǎng)站、網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站維護(hù)、公眾號(hào)搭建、小程序定制開(kāi)發(fā)、軟件開(kāi)發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動(dòng)行銷(xiāo)領(lǐng)域創(chuàng)造價(jià)值而不懈努力!

1. 截取字符串的前8位


expr substr "$string" 1 8
echo $string | awk '{print substr(,1,8)}'
echo $string | cut -c1-8
echo $string | dd bs=1 count=8 2>/dev/null

2. 分割、替換字符串


2.1 命令說(shuō)明

符號(hào)釋義
*通配符,用于匹配字符串將被刪除的子串
.分割符,可以為任意一個(gè)或多個(gè)字符
%從右向左匹配
#從左向右匹配
/表示替換
% # /非貪婪匹配,即匹配符合通配符的短結(jié)果
% ## //貪婪匹配,即匹配符合通配符的最長(zhǎng)結(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 命令說(shuō)明


示例含義
${VALUE:POSITION}在字符串VALUE中,從位置POSITION開(kāi)始提取子串(從左到右匹配)
${VALUE:POSITION:LENGTH}在字符串VALUE中,從位置POSITION開(kāi)始提取長(zhǎng)度為L(zhǎng)ENGTH的子串(從左到右匹配)
${VALUE:0-OFFSET}在字符串VALUE中,從右到左截取OFFSET個(gè)字符
${VALUE:0-OFFSET:LENGTH}在字符串VALUE中,從右到左截取OFFSET個(gè)字符的前LENGTH個(gè)

3.2 應(yīng)用實(shí)例


定義變量name=mynameisodysee

在字符串name中,從位置2開(kāi)始提取子串(從左到右匹配)


echo ${name:2} # 輸出結(jié)果 nameisodysee

在字符串name中,從位置2開(kāi)始提取長(zhǎng)度為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位開(kāi)始截取后面所有字符串,輸出結(jié)果:2342341
echo ${string:3:3}   # 從第3位開(kāi)始截取后面3位,輸出結(jié)果:123
echo ${string:3:6}   #從第3位開(kāi)始截取后面6位,輸出結(jié)果:123423  
echo ${string: -4}   #截取后4位,輸出結(jié)果:2341
echo ${string:(-4)}   #同上  
expr substr $string 3 3 #從第3位開(kāi)始截取后面3位,輸出結(jié)果123

定義變量str="abcdef",以下為截取示例


expr substr "$str" 1 3 # 從第一個(gè)位置開(kāi)始取3個(gè)字符,輸出結(jié)果:abc 
expr substr "$str" 2 5 # 從第二個(gè)位置開(kāi)始取5個(gè)字符,輸出結(jié)果:bcdef  
expr substr "$str" 4 5 # 從第四個(gè)位置開(kāi)始取5個(gè)字符,輸出結(jié)果:def 
echo ${str:2}      # 從第二個(gè)位置開(kāi)始提取字符串,輸出結(jié)果:bcdef 
echo ${str:2:3}     # 從第二個(gè)位置開(kāi)始提取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 命令說(shuō)明


示例含義
${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變量,但值為空(會(huì)返回空值)
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變量,但值為空(會(huì)返回空值)
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. 獲取字符串長(zhǎng)度


# 定義變量string=abc12342341
echo ${#string}  # 輸出結(jié)果 11
expr length $string # 輸出結(jié)果 11
expr "$string" : ".*" # 分號(hào)二邊要有空格,這里的:根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. 獲取從字符串開(kāi)頭到子串的較大長(zhǎng)度


# 定義變量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 顯示括號(hào)中匹配的內(nèi)容

9. 顯示不匹配的內(nèi)容


# 定義變量string=abc12342341
echo ${string#a*3}   # 從$string左邊開(kāi)始,去掉短匹配子串,輸出結(jié)果:42341 
echo ${string#c*3}   # 這樣什么也沒(méi)有匹配到,輸出結(jié)果:abc12342341
echo ${string#*c1*3}  # 從$string左邊開(kāi)始,去掉短匹配子串,輸出結(jié)果:42341 
echo ${string##a*3}  # 從$string左邊開(kāi)始,去掉最長(zhǎng)匹配子串,輸出結(jié)果:41
echo ${string%3*1}   # 從$string右邊開(kāi)始,去掉短匹配子串,輸出結(jié)果:abc12342
echo ${string%%3*1}  # 從$string右邊開(kāi)始,去掉最長(zhǎng)匹配子串,輸出結(jié)果:abc12

# 定義變量str="abbc,def,ghi,abcjkl" 
echo ${str#a*c}     # 輸出結(jié)果:def,ghi,abcjkl 一個(gè)井號(hào)(#) 表示從左邊截取掉短的匹配 (這里把a(bǔ)bbc字串去掉) 
echo ${str##a*c}    # 輸出結(jié)果:jkl       兩個(gè)井號(hào)(##) 表示從左邊截取掉最長(zhǎng)的匹配 (這里把a(bǔ)bbc,def,ghi,abc字串去掉) 
echo ${str#"a*c"}    # 輸出結(jié)果:abbc,def,ghi,abcjkl  因?yàn)閟tr中沒(méi)有"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è)百分號(hào)(%)表示從右邊截取短的匹配  
echo ${str%%b*l}    # 輸出結(jié)果:a           兩個(gè)百分號(hào)表示(%%)表示從右邊截取最長(zhǎng)的匹配 
echo ${str%a*c}     # 輸出結(jié)果:abbc,def,ghi,abcjkl

# 這里要注意,必須從字符串的第一個(gè)字符開(kāi)始,或者從最后一個(gè)開(kāi)始,可以這樣記憶, 井號(hào)(#)通常用于表示一個(gè)數(shù)字,它是放在前面的;百分號(hào)(%)卸載數(shù)字的后面; 或者這樣記憶,在鍵盤(pán)布局中,井號(hào)(#)總是位于百分號(hào)(%)的左邊(即前面)

10. 去掉字符串末尾的字符


使用df -Th獲取磁盤(pán)信息,并將使用率賦給變量來(lái)與閾值進(jìn)行對(duì)比,如果存在%號(hào)無(wú)法進(jìn)行對(duì)比,所以需要去掉變量中的%號(hào),可以使用${var%?}的格式來(lái)去掉最后一個(gè)字符

#!/bin/bash

root_usage=$(df -TPh | grep -w "/" | awk '{print $6}')
echo ${root_usage%?}

感謝各位的閱讀!關(guān)于“Linux使用shell腳本處理字符串的實(shí)現(xiàn)方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

當(dāng)前文章:Linux使用shell腳本處理字符串的實(shí)現(xiàn)方法-創(chuàng)新互聯(lián)
URL標(biāo)題:http://bm7419.com/article42/ipehc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、ChatGPT、企業(yè)網(wǎng)站制作、服務(wù)器托管響應(yīng)式網(wǎng)站、用戶(hù)體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷(xiāo)型網(wǎng)站建設(shè)