2014-01-15 66 views
0

我想通過刪除前綴和擴展名來提取文件名。 例如file = foo_filename.txt從文件中刪除Shell中的前綴和擴展名

我正在使用這個,但它不工作。

${file#foo_%.txt} 

感謝

+0

請務必在Greg的維基退房[參數擴展(http://mywiki.wooledge.org/BashGuide/Parameters#Parameter_Expansion) 。 – w0ng

回答

1

你得到它幾乎是正確:

file=foo_filename.txt ; echo ${file%.txt} 

或者例如在一個步驟的sed:

file=foo_filename.txt ; echo ${file} | sed 's/^foo_\(.*\)\..*/\1/' 

另一種方法:

file=foo_filename.txt ; basename -s .txt ${file#foo_} 

你不能「鳥巢」在慶典變量擴展:Can ${var} parameter expansion expressions be nested in bash?

+0

我想刪除foo_,這也是前綴。 – Rgeek

+0

那麼你必須在兩個步驟中做到這一點,如在其他答案 –

+0

可能值得注意的是,由於所需的分叉,「一步法」比兩步法慢大約一千倍。如果文件名包含各種空格和特殊字符,它們也可能會失敗。 –

2
file="foo_filename.txt" 
file=${file#foo_} 
file=${file%.*} 
echo "$file" 
相關問題