shell截取字符串的方法_第1頁(yè)
shell截取字符串的方法_第2頁(yè)
shell截取字符串的方法_第3頁(yè)
shell截取字符串的方法_第4頁(yè)
shell截取字符串的方法_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、shell截取字符串的方法shell字符串的截取的問(wèn)題:一、Linux shell 截取字符變量的前8位,有方法如下:1.expr substr “$a” 1 82.echo $a|awk print substr(,1,8)3.echo $a|cut -c1-84.echo $5.expr $a : (.).*6.echo $a|dd bs=1 count=8 2/dev/null二、按指定的字符串截取1、第一種方法:$varible#*string 從左向右截取最后一個(gè)string后的字符串$varible#*string從左向右截取第一個(gè)string后的字符串$varible%strin

2、g*從右向左截取最后一個(gè)string后的字符串$varible%string*從右向左截取第一個(gè)string后的字符串“*”只是一個(gè)通配符可以不要例子:$ MYVAR=foodforthought.jpg$ echo $MYVAR#*forthought.jpg$ echo $MYVAR#*foodforthought.jpg2、第二種方法:$varible:n1:n2:截取變量varible從n1到n2之間的字符串??梢愿鶕?jù)特定字符偏移和長(zhǎng)度,使用另一種形式的變量擴(kuò)展,來(lái)選擇特定子字符串。試著在 bash 中輸入以下行:$ EXCLAIM=cowabunga$ echo $EXCLAIM:0

3、:3cow$ echo $EXCLAIM:3:7abunga這種形式的字符串截?cái)喾浅:?jiǎn)便,只需用冒號(hào)分開來(lái)指定起始字符和子字符串長(zhǎng)度。三、按照指定要求分割:比如獲取后綴名ls -al | cut -d “.” -f2一、構(gòu)造字符串直接構(gòu)造STR_ZERO=helloSTR_FIRST=i am a stringSTR_SECOND=success重復(fù)多次#repeat the first parm($1) by $2 timesstrRepeat()local x=$2if $x = ; thenx=0filocal STR_TEMP=while $x -ge 1 ;doSTR_TEMP=pr

4、intf %s%s $STR_TEMP $1x=expr $x - 1doneecho $STR_TEMP舉例:STR_REPEAT=strRepeat $USER_NAME 3echo repeat = $STR_REPEAT二、賦值與拷貝直接賦值與構(gòu)造字符串一樣USER_NAME=terry從變量賦值A(chǔ)LIASE_NAME=$USER_NAME三、聯(lián)接直接聯(lián)接兩個(gè)字符串STR_TEMP=printf %s%s $STR_ZERO $USER_NAME使用printf可以進(jìn)行更復(fù)雜的聯(lián)接四、求長(zhǎng)求字符數(shù)(char)COUNT_CHAR=echo $STR_FIRST | wc -mecho

5、$COUNT_CHAR求字節(jié)數(shù)(byte)COUNT_BYTE=echo $STR_FIRST | wc -cecho $COUNT_BYTE求字?jǐn)?shù)(word)COUNT_WORD=echo $STR_FIRST | wc -wecho $COUNT_WORD五、比較相等比較str1 = str2不等比較str1 != str2舉例:if $USER_NAME = terry ; thenecho I am terryfi小于比較#return 0 if the two string is equal, return 1 if $1 $2, else 2strCompare() local x

6、=0 if $1 != $2 ; then x=2 localTEMP=printf %sn%s $1 $2 local TEMP2=(echo $1; echo $2) |sort if $TEMP = $TEMP2 ; then x=1 fi fi echo $x 六、測(cè)試判空-z str判非空-n str是否為數(shù)字# return 0 if the string is num, otherwise 1strIsNum()local RET=1if -n $1 ; thenlocal STR_TEMP=echo $1 | sed s/0-9/gif -z $STR_TEMP ; thenR

7、ET=0fifiecho $RET舉例:if -n $USER_NAME ; thenecho my name is NOT emptyfiecho strIsNum 9980七、分割以符號(hào)為準(zhǔn),將字符分割為左右兩部分使用sed舉例:命令 date -rfc-3339 seconds 的輸出為2007-04-14 15:09:47+08:00取其左邊的部分date -rfc-3339 seconds | sed s/+0-90-9:0-90-9/g輸出為2007-04-14 15:09:47取+右邊的部分date -rfc-3339 seconds | sed s/.*+/g輸出為08:00以

8、空格為分割符的字符串分割使用awk舉例:STR_FRUIT=Banana 0.89 100取第3字段echo $STR_FRUIT | awk print $3; 八、子字符串字符串1是否為字符串2的子字符串# return 0 if $1 is substring of $2, otherwise 1strIsSubstring()local x=1case $2 in*$1*) x=0;esacecho $x在做shell批處理程序時(shí)候,經(jīng)常會(huì)涉及到字符串相關(guān)操作。有很多命令語(yǔ)句,如:awk,sed都可以做字符串各種操作。 其實(shí)shell內(nèi)置一系列操作符號(hào),可以達(dá)到類似效果,大家知道,使用

9、內(nèi)部操作符會(huì)省略啟動(dòng)外部程序等時(shí)間,因此速度會(huì)非常的快。一、判斷讀取字符串值表達(dá)式含義$var變量var的值, 與$var相同$var-DEFAULT如果var沒(méi)有被聲明, 那么就以$DEFAULT作為其值 *$var:-DEFAULT如果var沒(méi)有被聲明, 或者其值為空, 那么就以$DEFAULT作為其值 *$var=DEFAULT如果var沒(méi)有被聲明, 那么就以$DEFAULT作為其值 *$var:=DEFAULT如果var沒(méi)有被聲明, 或者其值為空, 那么就以$DEFAULT作為其值 *$var+OTHER如果var聲明了, 那么其值就是$OTHER, 否則就為null字符串$var:+

10、OTHER如果var被設(shè)置了, 那么其值就是$OTHER, 否則就為null字符串$var?ERR_MSG如果var沒(méi)被聲明, 那么就打印$ERR_MSG *$var:?ERR_MSG如果var沒(méi)被設(shè)置, 那么就打印$ERR_MSG *$!varprefix*匹配之前所有以varprefix開頭進(jìn)行聲明的變量$!varprefix匹配之前所有以varprefix開頭進(jìn)行聲明的變量加入了“*” 不是意思是: 當(dāng)然, 如果變量var已經(jīng)被設(shè)置的話, 那么其值就是$var.chengmolocalhost $ echo $abc-okokchengmolocalhost $ echo $abcche

11、ngmolocalhost $ echo $abc=okokchengmolocalhost $ echo $abcok如果abc 沒(méi)有聲明“= 還會(huì)給abc賦值。chengmolocalhost $ var1=11;var2=12;var3=chengmolocalhost $ echo $!vvar1 var2 var3chengmolocalhost $ echo $!v*var1 var2 var3$!varprefix*與$!varprefix相似,可以通過(guò)變量名前綴字符,搜索已經(jīng)定義的變量,無(wú)論是否為空值。二、字符串操作(長(zhǎng)度,讀取,替換)表達(dá)式含義$#string$string的

12、長(zhǎng)度$string:position在$string中, 從位置$position開始提取子串$string:position:length在$string中, 從位置$position開始提取長(zhǎng)度為$length的子串$string#substring從變量$string的開頭, 刪除最短匹配$substring的子串$string#substring從變量$string的開頭, 刪除最長(zhǎng)匹配$substring的子串$string%substring從變量$string的結(jié)尾, 刪除最短匹配$substring的子串$string%substring從變量$string的結(jié)尾, 刪除最長(zhǎng)匹

13、配$substring的子串$string/substring/replacement使用$replacement, 來(lái)代替第一個(gè)匹配的$substring$string/substring/replacement使用$replacement, 代替所有匹配的$substring$string/#substring/replacement如果$string的前綴匹配$substring, 那么就用$replacement來(lái)代替匹配到的$substring$string/%substring/replacement如果$string的后綴匹配$substring, 那么就用$replacemen

14、t來(lái)代替匹配到的$substring說(shuō)明:*$substring”可以是一個(gè)正則表達(dá)式.1.長(zhǎng)度web97salewell97 $ test=I love chinaweb97salewell97 $ echo $#test12$#變量名得到字符串長(zhǎng)度2.截取字串chengmolocalhost $ test=I love chinachengmolocalhost $ echo $test:5e chinachengmolocalhost $ echo $test:5:10e china$變量名:起始:長(zhǎng)度得到子字符串3.字符串刪除chengmolocalhost $ test=c:/win

15、dows/boot.inichengmolocalhost $ echo $test#/c:/windows/boot.inichengmolocalhost $ echo $test#*/windows/boot.inichengmolocalhost $ echo $test#*/boot.inichengmolocalhost $ echo $test%/*c:/windowschengmolocalhost $ echo $test%/*$變量名#substring正則表達(dá)式從字符串開頭開始配備substring,刪除匹配上的表達(dá)式。$變量名%substring正則表達(dá)式從字符串結(jié)尾開

16、始配備substring,刪除匹配上的表達(dá)式。注意:$test#*/,$test%/* 分別是得到文件名,或者目錄地址最簡(jiǎn)單方法。4.字符串替換chengmolocalhost $ test=c:/windows/boot.inichengmolocalhost $ echo $test/c:windows/boot.inichengmolocalhost $ echo $test/c:windowsboot.ini$變量/查找/替換值 一個(gè)“/”表示替換第一個(gè),”/”表示替換所有,當(dāng)查找中出現(xiàn)了:”/”請(qǐng)加轉(zhuǎn)義符”/”表示。三、性能比較在shell中,通過(guò)awk,sed,expr 等都可以實(shí)現(xiàn),字符串上述操作。下面我們進(jìn)行性能比較。chengmolocalhost $ test=c:/windows/boot.inichengmolocalhost $ t

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論