我想通過刪除前綴和擴展名來提取文件名。 例如file = foo_filename.txt從文件中刪除Shell中的前綴和擴展名
我正在使用這個,但它不工作。
${file#foo_%.txt}
感謝
我想通過刪除前綴和擴展名來提取文件名。 例如file = foo_filename.txt從文件中刪除Shell中的前綴和擴展名
我正在使用這個,但它不工作。
${file#foo_%.txt}
感謝
你得到它幾乎是正確:
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?
我想刪除foo_,這也是前綴。 – Rgeek
那麼你必須在兩個步驟中做到這一點,如在其他答案 –
可能值得注意的是,由於所需的分叉,「一步法」比兩步法慢大約一千倍。如果文件名包含各種空格和特殊字符,它們也可能會失敗。 –
file="foo_filename.txt"
file=${file#foo_}
file=${file%.*}
echo "$file"
請務必在Greg的維基退房[參數擴展(http://mywiki.wooledge.org/BashGuide/Parameters#Parameter_Expansion) 。 – w0ng