Regular-Expression
是否可以在多個 mp3 文件的標題標籤中搜尋一個字元串並將其替換為另一個字元串?
我想
- 搜尋“ytversion”,
- 將其替換為“mqversion”
- 在標題標籤中
多個 mp3 文件。我希望這個過程不要編輯/刪除元數據內容的任何其他部分。
這可能嗎?如果是,我必須使用哪些工具?
- 我知道我可以在多個 mp3 文件的元數據中搜尋某個字元串。這在 EasyTag 中是可能的。
- 但是,如何用預定義元數據欄位(上例中的標題欄位)的另一個字元串替換該特定字元串?
我不需要使用 EasyTag,它只是我在某個時候安裝的。
我想我的問題的答案依賴於我肯定可以使用的正則表達式。只是我不知道任何能夠使用它們或實際實現它們的程序(無論是必須在 CLI 中使用還是具有 GUI)。
您可以使用該
id3v2
工具執行此操作,該工具應位於您的作業系統的儲存庫中(請注意,此解決方案假定 GNUgrep
,如果您正在執行 Linux,則為預設值):## Iterate over all file/dir names ending in mp3 for file in /path/to/dir/with/mp3/files/*mp3; do ## read the title and save in the variable $title title=$(id3v2 -l "$file" | grep -oP '^(Title\s*|TIT2\s*.*\)):\K(.*?)(?=Artist:)'); ## check if this title matches ytversion if [[ "$title" =~ "ytversion" ]]; then ## If it does, replace ytversion with mqversion and ## save in the new variable $newTitle newTitle=$(sed 's/ytversion/mqversion/g' <<<"$title") ## Set the tite tag for this file to the value in $newTitle id3v2 -t "$newTitle" "$file" fi done
這有點複雜,因為該
id3v2
工具在同一行列印標題和藝術家:$ id3v2 -l foo.mp3 id3v1 tag info for foo.mp3: Title : : title with mqversion string Artist: Album : Year: , Genre: Unknown (255) Comment: Track: 0 id3v2 tag info for foo.mp3: TENC (Encoded by): iTunes v7.0 TIT2 (Title/songname/content description): : title with mqversion string
該
-o
標誌告訴grep
只列印一行的匹配部分,並-P
啟用 PCRE 正則表達式。正則表達式正在搜尋以Title
0 或多個空格字元開頭的行,然後是:
(^Title\s*:
) 或以 開頭TIT2
,然後是):
(^TIT2\s*.*\)
) 的行。匹配到該點的所有內容都將被\K
. 然後它會搜尋最短的字元串 (.*?
),後跟Artist:
.((?=Artist:)
;這稱為正向前瞻,它會匹配您要查找的字元串,而不會將其計入匹配項,因此它不會被grep
) 列印。