標籤:style blog http strong sp 檔案 on 2014 log
引:有時候我們會碰到這這樣的需求,需要從檔案名稱xxx.yyy中切分出名稱xxx和副檔名yyy。這些可以利用“%” “%%” “#” “##”操作符來完成。
一. “%” 操作符:
1. 例子:
例1
例2
2.解釋:
例1:file變數的值為“sample.jpg”。 file%.* 意思是從file變數(例子中是sample.jpg)的右邊開始匹配,直到遇到第一個匹配 .* 的字串(例子中是.jpg),然後將其刪掉 。所以變數name的值就是sample了。
例2:如果file變數的值為"sample.jpg.txt",那麼file%.* 只會刪除 .txt ,name會是sample.jpg。也即%操作符是非貪婪的。遇到第一個匹配後就會停止。
3. 注意:
- % 後面的並不是Regex,* 匹配任意長的字元,? 匹配一個字元。如1?2 可以匹配132和1a2;a* 可以匹配任意以a開頭的字串。
- 匹配是從最後一個字元,從右向左匹配的。file%.*m (變數file值為sample.jpg)不會刪掉任何字元。因為變數的最後一個字元是 g,永遠也不會有匹配 .*m 的字串。
二. "%%" 操作符:
1. 例子:
2. 解釋:
“%%” 與 “%” 的區別就是‘%%‘是貪婪的,意味著它會匹配合格最長字串。所以在例子中,file%%.* 會從右邊開始匹配,最長的匹配是.jpg.txt,然後將其刪除。所以變數name的值為sample。
三. "#"操作符
1. 例子:
例1
例2
2. 解釋:
例1:file#*. 是從右向左執行非貪婪匹配。找到第一個匹配 *. 的字串(例子中是"sample."),然後將其刪除。於是變數ext就是 “jpg” 了。
例2:說明了#的匹配是非貪婪的,找到第一個匹配了就會停止。
四. "##"操作符
1. 例子:
2. 解釋:
與"%%" 類似,“##” 是 “#” 的貪婪模式,也即會從右向左匹配合格最長字串。所以例子中將會刪除“sample.jpg.txt"中的”sample.jgp.“。
shell編程--切分檔案名稱