有些指令碼要根據檔名進行各種處理,有時候需要保留檔名拋棄檔案字尾,也有時候需要檔案字尾不要檔名,這類提取檔案部分的操作使用shell的內建功能就能實現。需要用到的幾個操作符有:%、%%、#、##。
從右向左匹配 :% 和 %% 操作符的示例
#!/bin/bash#提取檔名,刪除字尾。
file_name="text.gif"
name=$
echo file name is: $name
輸出結果:
file name is: test
# $含義:從$var中刪除位於 % 右側的萬用字元左右匹配的字串,萬用字元從右向左進行匹配。
現在給變數 name 賦值,name=text.gif,那麼萬用字元從右向左就會匹配到 .gif,所有從 $var 中刪除匹配結果。
# % 屬於非貪婪操作符,他是從左右向左匹配最短結果;%% 屬於貪婪操作符,會從右向左匹配符合條件的最長字串。
file_name="text.gif.bak.2012"name=$
name2=$
echo file name is: $name
echo file name is: $name2
輸出結果:
file name is: test.gif.bak
//使用 % file name is: test
//使用 %% 操作符 %%
使用 .* 從右向左貪婪匹配到 .gif.bak.2012
從左向右匹配:# 和 ## 操作符示例
#!/bin/bash#提取字尾,刪除檔名。
file_name="text.gif"
suffix=$
echo suffix is: $suffix
輸出結果:
suffix is: gif
# $ 含義:從 $var 中刪除位於 # 右側的萬用字元所匹配的字串,萬用字元是左向右進行匹配。# 跟 % 一樣,# 也有貪婪操作符 ## 。
file_name="text.gif.bak.2012.txt"suffix=$
suffix2=$
echo suffix is: $suffix
echo suffix is: $suffix2
輸出結果:
suffix is: text.gif.bak.2012
//使用 # suffix2 is: txt
//使用 ## 操作符 ##
使用 *. 從左向右貪婪匹配到 text.gif.bak.2012
示例2,定義變數 url="www.1987.name"
echo $ #移除 .* 所匹配的最右邊的內容。www.1987
echo $ #將從右邊開始一直匹配到最左邊的 *. 移除,貪婪操作符。
wwwecho $ #移除 *. 所有匹配的最左邊的內容。
1987.name
echo $ #將從左邊開始一直匹配到最右邊的 *. 移除,貪婪操作符。
name
獲取檔名和副檔名
string afirstname afile.substring afile.lastindexof 1,afile.lastindexof afile.lastindexof 1 檔名 string alastname afile.substring afile.lastindexof 1,af...
C 提取檔名 C
假設有乙個字串包含了檔名 副檔名和路徑,如strfilename d c 程式設計 實驗3 myfile.txt 請使用c 編寫乙個靜態方法,該方法能夠取出路徑中的檔名 myfile.txt 乙個包含了檔名,副檔名和路徑的字串。字串中的檔名。strfilename d c 程式設計 實驗3 myfi...
問題 C C 提取檔名
假設有乙個字串包含了檔名 副檔名和路徑,如strfilename d c 程式設計 實驗3 myfile.txt 請使用c 編寫乙個靜態方法,該方法能夠取出路徑中的檔名 myfile.txt 乙個包含了檔名,副檔名和路徑的字串。字串中的檔名。input copy strfilename d c 程式...