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

优化正则表达式提取M3U播放列表tvg-name最后括号内值

提取M3U播放列表tvg-name字段最后一对括号内的内容

给定示例M3U播放列表:

#EXTM3U
#EXTINF:-1 tvg-id="wsoc.us" tvg-name="ABC 9 (Something) (WSOC)" tvg-logo="" group-title="US Locals",ABC 9 (Something) WSOC (WSOC) 
http://some.url/1
#EXTINF:-1 tvg-id="wbtv.us" tvg-name="CBS 3 WBTV (WBTV)" tvg-logo="" group-title="US Locals",CBS 3 WBTV (WBTV)
http://some.url/2
#EXTINF:-1 tvg-id="wcnc.us" tvg-name="NBC (Hey) 36 WCNC (WCNC)" tvg-logo="" group-title="US Locals (Something here)",NBC 36 (Hey) WCNC (WCNC)
http://some.url/3
#EXTINF:-1 tvg-id="wjzy.us" tvg-name="FOX 46 WJZY (Shout Out) (WJZY)" tvg-logo="" group-title="US Locals",FOX 46 WJZY (Shout Out) (WJZY)
http://some.url/4

需求是提取tvg-name字段中最后一对括号内的内容(如WSOC、WBTV、WCNC等),现有多工具组合命令可行,但可以用更简洁的单工具方案替代:

方案1:仅用Awk(逻辑清晰,推荐)

awk '/tvg-name/{match($0,/tvg-name="[^"]*\(([^)]+)\)"/, arr); print arr[1]}' Playlist.m3u | sort -u
  • 原理:通过正则精准匹配tvg-name字段,直接把最后一对括号内的内容捕获到数组arr的第1位,打印后去重排序。

方案2:仅用Grep(简洁高效)

grep -Po 'tvg-name=".*?\(\K[^)]+(?=\)"[^"]*$)' Playlist.m3u | sort -u
  • 原理:借助PCRE特性,\K忽略前面的匹配内容,(?=\)"[^"]*$)确保目标是tvg-name字段内的最后一对括号,直接提取括号里的文本。

方案3:仅用Sed

sed -n 's/.*tvg-name=".*(\([^)]*\))".*/\1/p' Playlist.m3u | sort -u
  • 原理:用正则匹配整行,捕获tvg-name里最后一对括号内的内容,将整行替换为捕获的内容并打印,最后去重排序。

这些单工具方案减少了管道调用的开销,代码更紧凑,维护性也更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:27:07