我需要将频道号添加到M3U播放列表文件中。这些频道号通过交互式提示传递到脚本。所有这些都占90%。
这个想法是脚本将逐行通过M3U,并添加到特定位置。不幸的是,它完成了所有行,但是将每个通道号添加到了每行,而不是每行一个通道号,如果有这么多的想法,我会有点迷失,有什么想法吗?
#!/bin/bash
LISTA="test.m3u"
LINEA_INFO=0
IFS=$'\n'
(
while read LINEA; do
INFO=$(echo "$LINEA" | grep '^#EXTINF:')
if [ "$LINEA_INFO" -eq 0 ] && [ -n "$INFO" ]; then
LINEA_INFO=1
CHANNELNAME=$(echo "$LINEA" | sed 's|.*,||')
echo choose the channel number for $CHANNELNAME
read varnumber < /dev/tty;
echo you chose $varnumber for $CHANNELNAME
fi
if [ "$LINEA_INFO" -eq 1 ] && [ -z "$INFO" ]; then
LINEA_INFO=0
echo "$LINEA" | sed -i -e's/\#EXTINF:-1\>/& tvg-chno="'$varnumber'"/' $LISTA
fi
done < "$LISTA"
)
echo "Done!"
如果我对您的理解正确,那么shell脚本应该遍历输入m3u文件的每一行,并为每一行填写交互式请求的通道号。因此,我建议:
#!/bin/bash
InputList="$1"
OutputList="$2"
> "$OutputList"
while IFS= read -r Line; do
if [[ "$Line" =~ ^#EXTINF: ]]; then
echo "choose the channel number for $Line"
read varnumber < /dev/tty
echo "you chose $varnumber for $Line"
Line="${Line%% *} tvg-chno=\"${varnumber}\" ${Line#* }"
fi
echo "$Line" >> "$OutputList"
done < "$InputList"
调用方式:
$ ./m3u_channels.sh test-1.m3u test-1-ch.m3u
它产生一个test-1-ch.m3u
插入了通道号的文件。
该程序非常简单。它读取循环$InputList
逐行给出的文件while
。read
在每个换行符处停止(默认情况下,如此处所用)。如果该行以开头#EXTIF:
,则提示用户,他们的输入存储在变量中$varnumber
(从程序中复制)。然后,将变量$Line
汇总为:
${Line%% *}
:字符串的开头$Line
到第一个空格。tvg-chno=\"${varnumber}\"
带有频道号的字符串。${Line#* }
:第$Line
一个空格中的字符串。然后,将变量的内容$Line
添加到输出文件(无论是否修改)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句