You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用sed批量编辑M3U文件:替换字段并复制字符串覆盖内容

解决M3U文件批量编辑的sed单行命令方案

我来帮你搞定这个M3U文件的批量编辑问题!你需要的两个操作完全可以合并成一行sed命令,我先拆解需求再给出完整方案:

需求回顾

  1. 将行中的tvg-chno替换为channelid
  2. 提取行最后一个逗号后的字符串,替换tvg-name的原有内容

完整单行sed命令

sed -E -e 's/(.*tvg-name=")[^"]*(".*),([^,]*)$/\1\3\2,\3/' -e 's/tvg-chno/channelid/g' your_file.m3u

命令详解

我们把两个操作拆解开来看:

1. 替换tvg-name为最后逗号后的内容

第一个替换命令s/(.*tvg-name=")[^"]*(".*),([^,]*)$/\1\3\2,\3/的作用:

  • (.*tvg-name="):捕获从行开头到tvg-name="的所有内容(保存为分组1)
  • [^"]*:匹配tvg-name当前的属性值(任意非引号字符)
  • (".*),:捕获从tvg-name的闭合引号到最后一个逗号前的所有内容(保存为分组2)
  • ([^,]*)$:捕获最后一个逗号后的目标字符串(保存为分组3,也就是我们要替换到tvg-name里的内容)
  • 替换后的结构:分组1 + 分组3 + 分组2 + 原逗号和分组3,这样就把tvg-name的值替换成了最后逗号后的内容,同时保留行末尾的原有字符串。

2. 替换tvg-chno为channelid

第二个命令s/tvg-chno/channelid/g很直接,全局替换行内的tvg-chno字符串为channelid。

测试效果

用你给出的示例行测试:

#EXTINF:-1 tvg-id="NBC.us" tvg-name="NBC US" tvg-logo="http://example.com/NBC.us.png" tvg-chno="12" group-title="United States",NBC

执行命令后会变成:

#EXTINF:-1 tvg-id="NBC.us" tvg-name="NBC" tvg-logo="http://example.com/NBC.us.png" channelid="12" group-title="United States",NBC

完全符合你的需求!

注意事项

  • 如果你用的是GNU sed,也可以用-r代替-E(两者等价);BSD sed(比如macOS系统)必须用-E来启用扩展正则表达式。
  • 确保每行只有一个tvg-name属性和一个末尾的逗号分隔字符串,这个命令是基于这个前提设计的。

内容的提问来源于stack exchange,提问作者andrewkhunn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:44:47