2016-11-18 65 views
0

我有大量的文件格式爲從提取文件名

OUTPUT_11_0.175

我想提取兩個數字的文件名(可變)子,我設法拿到了第二數量以下內容:

for file in ./dir/*; do 
phi=${file##*_} 
echo "$phi" 
done 

要獲得這種情況下,其他的11號,我試過

a=${file#*_} 

,但是這會返回第一個下劃線左邊的所有內容(該目錄包含下劃線) - 是否有某種方法說服bash去讀取兩個下劃線之間的''''並返回'11'?

+0

'設定 - $ {//文件_ /};回聲「$ 2 $ 3」'? – Cyrus

回答

2
$ IFS=_ read -a foo <<< "OUTPUT_11_0.175" 
$ echo "${foo[0]}" 
OUTPUT 
$ echo "${foo[1]}" 
11 
$ echo "${foo[2]}" 
0.175 
+0

我發現〜http://tldp.org/LDP/abs/html/x17837.html#HERESTRINGSREF幫助我拼湊出這意味着什麼。 –

+0

很好的解釋,'IFS = _'將內部字段分隔符設置爲'_',它將用於將'_'周圍的herestring拆分爲'foo'數組 – Aaron