我正在編寫一個使用Sed(由gnuwin32版本4.2.1)轉換.m3u播放列表(使用Windows Media Player生成)的批處理腳本,並將其轉換爲接受作爲TeamSpeak 3插件「Soundboard」(來自http://www.kampfrausch.de/ts3)的輸入。用Sed轉換.m3u播放列表
總的想法是執行8套搜索和替換所有:
1) 搜索:。。 \ \ \\\ \ \\ 取代: C:\ \用戶\\我\\
2) 搜索:\\ \ \ 取代: C:\\用戶\\我\\音樂\\
3) 搜索: #EXTM3U 取代: EMPTY_STRING_HERE
4) 搜索: :0, 取代: :-1,
5) 搜索: \\ 替換: /
6) 搜索: C:/ 替換: 文件:/// C:/
7) 搜索: .MP3 \ r \ nfile的 取代: \ r \ nfile的
8) 搜索: ^ \ r \ n 取代: EMPTY_STRING_HERE
手動執行(與記事本++查找和替換)噸他的作品和播放列表完全有效。
但是,我似乎無法在Sed中編寫7)和8)的語法,因爲Sed並不是一次比較多行的最佳工具。
這是迄今爲止代碼:
@echo off
sed s/\.\.\\\.\.\\/C:\\Users\\Me\\/g badplaylist.m3u > temp.dat
type temp.dat > badplaylist.m3u
sed s/\.\.\\/C:\\Users\\Me\\Music\\/g badplaylist.m3u > temp.dat
type temp.dat > badplaylist.m3u
sed s/#EXTM3U//g badplaylist.m3u > temp.dat
type temp.dat > badplaylist.m3u
sed s/:0,/:-1,/g badplaylist.m3u > temp.dat
type temp.dat > badplaylist.m3u
sed s/\\/\//g badplaylist.m3u > temp.dat
type temp.dat > badplaylist.m3u
sed s/C:\//file:\/\/\/C:\//g badplaylist.m3u > temp.dat
type temp.dat > badplaylist.m3u
:: 7) expression, that removes ".mp3" at the end of a line if the NEXT line starts with "file:///C:/"
:: 8) remove all completely empty lines
del temp.dat
是否有人有一個想法,我怎麼能解決7)和8)?
當然,我不需要一個Sed代碼,到目前爲止它只是一個不錯的選擇。我需要的只是一個在批處理中工作的解決方案。
問候,喬
#8很簡單,只是'sed'/^$/d''。 7,也許有一些有用的[這裏](http://sed.sourceforge.net/sed1line.txt)。您的代碼註釋7與您的項目符號列表中的#7不太匹配。你想替換'.mp3'還是替換'\ r \ nfile'? – rojo 2014-12-03 21:36:05
沒錯,但如果下一行以「file ...」開始,它會自動以f開始,並且在我的情況下沒有其他的f可能在行的開頭。因爲清晰而改變了它,謝謝! – 2014-12-03 21:39:21