工作中字符串操作舉例 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獲取需要的字符串內容 buName2=`echo $filename | awk -F / '{printf("%s", $5)}'`; echo $buName2 #下面使用cut獲取需要的字符串內容 buName3=`echo $filename | cut -d / -f 5`; echo $buName3 以上均能獲得結果:CnClickstat 字符串操作舉例結束 在做shell批處理程序時候,經常會涉及到字符串相關操作。有很多命令語句,如:awk,sed都可以做字符串各種操作。其實shell內置一系列操作符號,可以達到類似效果,大家知道,使用內部操作符會省略啟動外部程序等時間,因此速度會非常的快。 一、判斷讀取字符串值
加入了“*” 不是意思是: 當然, 如果變量var已經被設置的話, 那么其值就是$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@}相似,可以通過變量名前綴字符,搜索已經定義的變量,無論是否為空值。 二、字符串操作(長度,讀取,替換)
說明:"* $substring”可以是一個正則表達式. 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正則表達式}從字符串開頭開始配備substring,刪除匹配上的表達式。 ${變量名%substring正則表達式}從字符串結尾開始配備substring,刪除匹配上的表達式。 注意:${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 ${變量/查找/替換值}一個“/”表示替換第一個,”//”表示替換所有,當查找中出現了:”/”請加轉義符”\/”表示。 三、性能比較 在shell中,通過awk,sed,expr等都可以實現,字符串上述操作。下面我們進行性能比較。 [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 速度相差上百倍,調用外部命令處理,與內置操作符性能相差非常大。在shell編程中,盡量用內置操作符或者函數完成。使用awk,sed類似會出現這樣結果。 Yorking Alan |
免責聲明:本站部分文章和圖片均來自用戶投稿和網絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業用途,如果損害了您的權利,請聯系我們及時修正或刪除。謝謝!
始終以前瞻性的眼光聚焦站長、創業、互聯網等領域,為您提供最新最全的互聯網資訊,幫助站長轉型升級,為互聯網創業者提供更加優質的創業信息和品牌營銷服務,與站長一起進步!讓互聯網創業者不再孤獨!
掃一掃,關注站長網微信