
次のファイル名を含むテキスト ファイル 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行ずつ読み取る- 括弧は
()
キャプチャグループを作成し、最初のキャプチャグループに一致するものが入力されます( sed$1
と同様)\1
\.
sedと同様に、リテラルドットに一致する- 印刷引数を出力するだけ
$_
下は-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
- 新しい行を挿入します