需要幫助 sed、awk 或其他可以操作文字檔的工具

需要幫助 sed、awk 或其他可以操作文字檔的工具

我有一個文字檔案 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(類似\1sed)
  • \.,就像在 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- 這會插入新行

相關內容