需要帮助 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 类似,匹配文字点
  • 打印仅输出其参数
  • $_下方-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- 插入新行

相关内容