的經典方法是basename
命令:
file="text.rtf"
new=$(basename "$file" .rtf).mobi
更現代的方式避免了行使其他程序:
file="text.rtf"
new="${file%.rtf}.mobi"
如果你真的必須使用awk
,那麼我想你使用:
file="text.rtf"
new=$(echo "$file" | awk '/\.rtf$/ { sub(/\.rtf$/, ".mobi"); } { print }')
對於sed
,喲u使用:
file="text.rtf"
new=$(echo "$file" | sed 's/\.rtf$/.mobi/')
正則表達式的一個很好的解釋,那麼你要弗裏德爾的"Mastering Regular Expressions"書。
要text.rtf.mobi
轉換爲text.mobi
,你可以使用任何先前細微調整顯示的工具:
new=$(basename "$file" .rtf.mobi).mobi
new="${file%.rtf.mobi}.mobi"
new=$(echo "$file" | awk '/\.rtf\.mobi$/ { sub(/\.rtf\.mobi$/, ".mobi"); } { print }')
new=$(echo "$file" | sed 's/\.rtf\.mobi$/.mobi/')
,事情僅略有不同,如果.rtf
可以是任何其他擴展名,但你開始問自己:「爲什麼不在轉換文件之前從文件中刪除原始擴展名,或者使用轉換器中的文件命名工具來獲取所需的輸出名稱?」
與basename
不再有明智的做法。
new="${file/.[!.]*.mobi/}" # bash
new=$(echo "$file" | awk '/\.[^.]+\.mobi$/ { sub(\.[^.]*\.mobi$/, ".mobi"); } { print }')
new=$(echo "$file" | sed 's/\.[^.]*\.mobi$/.mobi/')
將'important.document.v1.rtf.mobi'損壞到'important.mobi'中。 –
是的我認爲這是他的意思 –
是的!這個!非常感謝! – Kristian