2017-05-03 200 views
0

我一直在此尋找一段時間,似乎無法找到如何使用sed來執行此操作的解決方案。我有一個文件,名爲:如何刪除文件名中包含第二個下劃線的字符

FILE_772829345_D594_242_25kd_kljd.mov

,我想改名

D594_242_25kd_kljd.mov

我目前一直在試圖讓sed來此工作,但有隻能夠刪除文件的第一秒:

echo 'FILE_772829345_D594_242_25kd_kljd.mov' | sed 's/[^_]*//' 
_772829345_D594_242_25kd_kljd.mov 

我該如何讓sed再次執行相同的指令,直到第二個下劃線?

+0

'sed的「S/[^ _ * _ [^ _] * _ //'' – Rob

回答

1

如果文件名是在shell變量,您甚至不需要使用sed,只需使用shell expansion with #修整第二個下劃線:

filename="FILE_772829345_D594_242_25kd_kljd.mov" 
echo "${filename#*_*_}" # prints "D594_242_25kd_kljd.mov" 

順便說一句,如果你要使用mv重命名文件,使用其-i選項,以避免文件覆蓋掉了,如果有任何名稱衝突:

mv -i "$filename" "${filename#*_*_}" 
+0

我用這個方法!工作得很好...只需要弄清楚如何讓我的腳本現在可以接受多個文件。 '回聲 「請在此處拖動文件:」 讀取文件名 路徑= $(目錄名稱 「$ {文件名}」) 文件= $(名前綴 「$ {文件名}」) MV -i「$ PATH/$ file「」$ path/$ {file#* _ * _}「' –

+0

@DerekEdwards嘗試'讀取-a文件名;用於「$ {filenames [@]}」中的文件名;做...' –

+0

謝謝!這工作。你能解釋一下這是幹什麼嗎?!無論如何,我會仔細研究。 –

1

如果您的所有文件的名稱相似,你可以使用cut這將是一個簡單得多比sed用正則表達式:

cut -f3- -d_ <<< "FILE_772829345_D594_242_25kd_kljd.mov" 

輸出:

D594_242_25kd_kljd.mov 
相關問題