shell 切分文件名提取文件擴展名或提取文件名


有些腳本要根據文件名進行各種處理,有時候需要保留文件名拋棄文件后綴,也有時候需要文件后綴不要文件名,這類提取文件部分的操作使用shell的內建功能就能實現。需要用到的幾個操作符有:%%%###

從右向左匹配 :% 和 %% 操作符的示例

#!/bin/bash
#提取文件名,刪除后綴。

file_name="text.gif"
name=${file_name%.*}
echo file name is: $name

輸出結果:
file name is: test

# ${VAR%.* }含義:從$VAR中刪除位於 % 右側的通配符左右匹配的字符串,通配符從右向左進行匹配。現在給變量 name 賦值,name=text.gif,那么通配符從右向左就會匹配到 .gif,所有從 $VAR 中刪除匹配結果。
# % 屬於非貪婪操作符,他是從左右向左匹配最短結果;%% 屬於貪婪操作符,會從右向左匹配符合條件的最長字符串。

file_name="text.gif.bak.2012"
name=${file_name%.*}
name2=${file_name%%.*}
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=${file_name#*.}
echo suffix is: $suffix

輸出結果:
suffix is: gif

# ${VAR#*.} 含義:從 $VAR 中刪除位於 # 右側的通配符所匹配的字符串,通配符是左向右進行匹配。
# 跟 % 一樣,# 也有貪婪操作符 ## 。

file_name="text.gif.bak.2012.txt"
suffix=${file_name#*.}
suffix2=${file_name##*.}
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 ${url%.*}      #移除 .* 所匹配的最右邊的內容。
www.1987
echo ${url%%.*}     #將從右邊開始一直匹配到最左邊的 *. 移除,貪婪操作符。
www
echo ${url#*.}      #移除 *. 所有匹配的最左邊的內容。
1987.name
echo ${url##*.}     #將從左邊開始一直匹配到最右邊的 *. 移除,貪婪操作符。
name


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM