
我有一個文字檔案 Test.m3u,其中包含檔案名稱:
FileName1.mp4
FileName2.mp4
FileName3.mp4
我需要以以下形式製作播放清單:
#EXTM3U
#EXTINF:FileName1
PATH/FileName1.mp4
#EXTINF:FileName2
PATH/FileName2.mp4
#EXTINF:FileName3
PATH/FileName3.mp4
命令:
sed -i -e 's/^/PATH:/' test.m3u
將為每行新增路徑,但如何將 #EXTINF:FileNameX 行放在每行上方?
答案1
Perl 來救援!
perl -i -ne '/(.*)\.mp4/;print "#EXTINF:$1\nPATH/$_"' -- file
您也可以包括
BEGIN { print "#EXTM3U\n\n" }
取得輸出中的標題。
-i
「就地」更改文件-n
逐行讀取輸入- 括號
()
建立一個捕獲組,匹配第一個捕獲組的內容填充$1
(類似\1
sed) \.
,就像在 sed 中一樣,匹配文字點- 列印只是輸出它的參數
$_
under-n
是當前行的內容
答案2
這個指令對我有用:
$ sed -e 's/\(.*\)\.\(.*\)/#EXTINF:\1\nPATH\/\1.\2/' test.m3u
#EXTINF:FileName1
PATH/FileName1.mp4
#EXTINF:FileName2
PATH/FileName2.mp4
#EXTINF:FileName3
PATH/FileName3.mp4
解釋:
.*
- 這匹配任何東西
\(.*\)
- 這符合任何內容並且可以重複使用(透過 \1 和下一個使用 \2)
\.
- 這與實際的點字元相符(在這種情況下將基本名稱與擴展名分開)
\n
- 這會插入新行