精品免费在线观看-精品欧美-精品欧美成人bd高清在线观看-精品欧美高清不卡在线-精品欧美日韩一区二区

17站長網

17站長網 首頁 腳本 linux shell 查看內容

shell字符串操作(長度,查找,替換)詳解

2022-12-8 15:40| 查看: 2370 |來源: 互聯網

工作中字符串操作舉例 filename='/home/admin/jobs/CnClickstat/DFSLoader/loader.cfg' #下面是使用shell字符串操作 buName1=${filename#*/jobs/} #去除'/home/admin/jobs/CnClickstat/DFSLoader/loader.cfg'前綴得
工作中字符串操作舉例
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的值, $var相同

${var-DEFAULT}

如果var沒有被聲明, 那么就以$DEFAULT作為其值 *

${var:-DEFAULT}

如果var沒有被聲明, 或者其值為空, 那么就以$DEFAULT作為其值 *

${var=DEFAULT}

如果var沒有被聲明, 那么就以$DEFAULT作為其值 *

${var:=DEFAULT}

如果var沒有被聲明, 或者其值為空, 那么就以$DEFAULT作為其值 *

${var+OTHER}

如果var聲明了, 那么其值就是$OTHER, 否則就為null字符串

${var:+OTHER}

如果var被設置了, 那么其值就是$OTHER, 否則就為null字符串

${var?ERR_MSG}

如果var沒被聲明, 那么就打印$ERR_MSG *

${var:?ERR_MSG}

如果var沒被設置, 那么就打印$ERR_MSG *

${!varprefix*}

匹配之前所有以varprefix開頭進行聲明的變量

${!varprefix@}

匹配之前所有以varprefix開頭進行聲明的變量


加入了“*” 不是意思是: 當然, 如果變量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@}相似,可以通過變量名前綴字符,搜索已經定義的變量,無論是否為空值。

二、字符串操作(長度,讀取,替換)

表達式

含義

${#string}

$string的長度

${string:position}

$string, 從位置$position開始提取子串

${string:position:length}

$string, 從位置$position開始提取長度為$length的子串

${string#substring}

從變量$string的開頭,刪除最短匹配$substring的子串

${string##substring}

從變量$string的開頭,刪除最長匹配$substring的子串

${string%substring}

從變量$string的結尾,刪除最短匹配$substring的子串

${string%%substring}

從變量$string的結尾,刪除最長匹配$substring的子串

${string/substring/replacement}

使用$replacement, 來代替第一個匹配的$substring

${string//substring/replacement}

使用$replacement, 代替所有匹配的$substring

${string/#substring/replacement}

如果$string前綴匹配$substring,那么就用$replacement來代替匹配到的$substring

${string/%substring/replacement}

如果$string后綴匹配$substring,那么就用$replacement來代替匹配到的$substring


說明:"* $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
本文最后更新于 2022-12-8 15:40,某些文章具有時效性,若有錯誤或已失效,請在網站留言或聯系站長:[email protected]
·END·
站長網微信號:w17tui,關注站長、創業、關注互聯網人 - 互聯網創業者營銷服務中心

免責聲明:本站部分文章和圖片均來自用戶投稿和網絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業用途,如果損害了您的權利,請聯系我們及時修正或刪除。謝謝!

17站長網微信二維碼

始終以前瞻性的眼光聚焦站長、創業、互聯網等領域,為您提供最新最全的互聯網資訊,幫助站長轉型升級,為互聯網創業者提供更加優質的創業信息和品牌營銷服務,與站長一起進步!讓互聯網創業者不再孤獨!

掃一掃,關注站長網微信

大家都在看

    熱門排行

      最近更新

        返回頂部
        主站蜘蛛池模板: 日本一级特黄完整大片 | 亚洲精品一区二区ai换脸 | 亚洲国产精品ⅴa在线观看 亚洲国产精品aaa一区 | 日本免费一区二区视频 | 成人国产一区二区三区 | 福利国产视频 | 久久不色 | 国内精品视频 在线播放 | 天天狠天天透天干天天怕处 | 深夜做爰性大片很黄很色视频 | 韩国免费人成在线观看网站 | 中文字幕亚洲欧美日韩不卡 | 国产伦精一区二区三区 | 国产91av在线 | 免费观看性行为的视频网站 | 欧美一级爆毛片 | 欧美日韩不卡中文字幕在线 | 国产成本人三级在线观看网站 | 91真人毛片一级在线播放 | 中文字幕精品视频在线观看 | 国产成人久久精品二区三区 | 你懂的网址免费国产 | 九九精品免视看国产成人 | 黄网在线观看 | 亚洲国产精品自在现线让你爽 | 日本免费不卡视频一区二区三区 | 青青青国产依人免费视频 | 国产片一区二区三区 | 老师的丰满大乳奶水视频 | 男女爱爱视频在线观看 | 91网视频在线观看 | 亚久久伊人精品青青草原2020 | www.亚洲第一 | 91在线视屏| 成年人黄色大片大全 | 国产真实伦偷精品 | 精品国产一区二区二三区在线观看 | 最新91网址 | 九九视频高清视频免费观看 | 青青草国产精品久久久久 | 亚洲欧洲精品久久 |