工作中字符串操作舉例 filename='/home/admin/jobs/CnClickstat/DFSLoader/loader.cfg' #下面是使用shell字符串操作 buName1=${filename#*/jobs/} #去除'/home/admin/jobs/CnClickstat/DFSLoader/loader.cfg'前綴得到'CnClickstat/DFSLoader/loader.cfg' buName1=${buName1%%/*} #去除'CnClickstat/DFSLoader/loader.cfg'后綴得到'CnClickstat' echo $buName1 #下面用awk獲取需要的字符串內(nèi)容 buName2=`echo $filename | awk -F / '{printf("%s", $5)}'`; echo $buName2 #下面使用cut獲取需要的字符串內(nèi)容 buName3=`echo $filename | cut -d / -f 5`; echo $buName3 以上均能獲得結(jié)果:CnClickstat 字符串操作舉例結(jié)束 在做shell批處理程序時候,經(jīng)常會涉及到字符串相關(guān)操作。有很多命令語句,如:awk,sed都可以做字符串各種操作。其實shell內(nèi)置一系列操作符號,可以達(dá)到類似效果,大家知道,使用內(nèi)部操作符會省略啟動外部程序等時間,因此速度會非常的快。 一、判斷讀取字符串值
加入了“*” 不是意思是: 當(dāng)然, 如果變量var已經(jīng)被設(shè)置的話, 那么其值就是$var. [chengmo@localhost ~]$ echo ${abc-'ok'} ok [chengmo@localhost ~]$ echo $abc [chengmo@localhost ~]$ echo ${abc='ok'} ok [chengmo@localhost ~]$ echo $abc ok 如果abc 沒有聲明“="還會給abc賦值。 [chengmo@localhost ~]$ var1=11;var2=12;var3= [chengmo@localhost ~]$ echo${!v@} var1 var2 var3 [chengmo@localhost ~]$ echo ${!v*} var1 var2 var3 ${!varprefix*}與${!varprefix@}相似,可以通過變量名前綴字符,搜索已經(jīng)定義的變量,無論是否為空值。 二、字符串操作(長度,讀取,替換)
說明:"* $substring”可以是一個正則表達(dá)式. 1.長度 [web97@salewell97 ~]$ test='I love china' [web97@salewell97 ~]$ echo ${#test} 12 ${#變量名}得到字符串長度 2.截取字串 [chengmo@localhost ~]$ test='I love china' [chengmo@localhost ~]$ echo ${test:5} e china [chengmo@localhost ~]$ echo ${test:5:10} e china ${變量名:起始:長度}得到子字符串 3.字符串刪除 [chengmo@localhost ~]$ test='c:/windows/boot.ini' [chengmo@localhost ~]$ echo ${test#/} c:/windows/boot.ini [chengmo@localhost ~]$ echo ${test#*/} windows/boot.ini [chengmo@localhost ~]$ echo ${test##*/} boot.ini [chengmo@localhost ~]$ echo ${test%/*} c:/windows [chengmo@localhost ~]$ echo ${test%%/*} ${變量名#substring正則表達(dá)式}從字符串開頭開始配備substring,刪除匹配上的表達(dá)式。 ${變量名%substring正則表達(dá)式}從字符串結(jié)尾開始配備substring,刪除匹配上的表達(dá)式。 注意:${test##*/},${test%/*} 分別是得到文件名,或者目錄地址最簡單方法。 4.字符串替換 [chengmo@localhost ~]$ test='c:/windows/boot.ini' [chengmo@localhost ~]$ echo ${test/\//\\} c:\windows/boot.ini [chengmo@localhost ~]$ echo ${test//\//\\} c:\windows\boot.ini ${變量/查找/替換值}一個“/”表示替換第一個,”//”表示替換所有,當(dāng)查找中出現(xiàn)了:”/”請加轉(zhuǎn)義符”\/”表示。 三、性能比較 在shell中,通過awk,sed,expr等都可以實現(xiàn),字符串上述操作。下面我們進(jìn)行性能比較。 [chengmo@localhost ~]$test='c:/windows/boot.ini' [chengmo@localhost ~]$ time for i in $(seq 10000);doa=${#test};done; real 0m0.173s user 0m0.139s sys 0m0.004s [chengmo@localhost ~]$ time for i in $(seq 10000);do a=$(expr length$test);done; real 0m9.734s user 0m1.628s 速度相差上百倍,調(diào)用外部命令處理,與內(nèi)置操作符性能相差非常大。在shell編程中,盡量用內(nèi)置操作符或者函數(shù)完成。使用awk,sed類似會出現(xiàn)這樣結(jié)果。 Yorking Alan |
免責(zé)聲明:本站部分文章和圖片均來自用戶投稿和網(wǎng)絡(luò)收集,旨在傳播知識,文章和圖片版權(quán)歸原作者及原出處所有,僅供學(xué)習(xí)與參考,請勿用于商業(yè)用途,如果損害了您的權(quán)利,請聯(lián)系我們及時修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長、創(chuàng)業(yè)、互聯(lián)網(wǎng)等領(lǐng)域,為您提供最新最全的互聯(lián)網(wǎng)資訊,幫助站長轉(zhuǎn)型升級,為互聯(lián)網(wǎng)創(chuàng)業(yè)者提供更加優(yōu)質(zhì)的創(chuàng)業(yè)信息和品牌營銷服務(wù),與站長一起進(jìn)步!讓互聯(lián)網(wǎng)創(chuàng)業(yè)者不再孤獨!
掃一掃,關(guān)注站長網(wǎng)微信