Regular-Expression
有什麼方法可以改進這個正則表達式 oneliner?
我有很多具有以下語法的影片文件:
TV.Show.Title.SXEY.Episode.Title.1080p.Uploader.mkv
其中
SXEY
不是恆定的。X
並且Y
是取決於文件的數字。我想將它們重命名為TV Show Title - SXEY - Episode Title.mkv
為了做到這一點,我將
rename
命令用作以下 oneliner:rename 's/\./\ -\ /;s/\./\ -\ /;s/\.(?!mkv)/\ /g;s/1080p.*(?=\.mkv)//g' *.mkv
該命令首先將前兩個點轉換為
␣-␣
,然後將所有其他點轉換為空格,最後刪除劇集標題結尾和文件副檔名之間的所有內容。有什麼改進的辦法嗎?我想有一種方法可以只用一個正則表達式來轉換前兩個點。我相信
rename
它是一個 GNU 實用程序,因此並不存在於所有 Unix 系統上,我正在尋找一種更便攜的替代方案。
regex
讚賞這個問題實際上是關於for m in *.mkv; do echo mv $m "$(awk -F'.' '{ printf "%s %s %s - %s - %s %s.%s", $1, $2, $3, $4, $5, $6, $(NF)}' <<<$m)"; done
可預測,易於閱讀,也易於修改您的輸出字元串。只需刪除
echo
編輯
關於您在下面的評論
sed
,您可以簡單地通過使用sed
而不是處理輸出的文件名來使用相同的技術awk
for m in *.mkv; do echo mv $m "$(sed 's/\./ /1;s/\./ /1;s/\./ - /1;s/\./ - /1;s/\./ /1;s/\..*\././' <<<$m)"; done