テキストファイルを操作できる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行ずつ読み取る
  • 括弧は()キャプチャグループを作成し、最初のキャプチャグループに一致するものが入力されます( 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- 新しい行を挿入します

関連情報