Regular-Expression

有什麼方法可以改進這個正則表達式 oneliner?

  • April 21, 2020

我有很多具有以下語法的影片文件:

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

引用自:https://unix.stackexchange.com/questions/580909