M3Uプレイリストファイルにチャンネル番号を追加する必要があります。これらのチャネル番号は、対話型プロンプトを介してスクリプトに渡されます。すべて90%効果的です。
アイデアは、スクリプトがM3Uで1行ずつ移動され、特定の場所に追加されることです。残念ながら、すべての行を実行しますが、行ごとに1つのチャネル番号の代わりに各行に各チャネル番号を追加します。これまで少し失いました。アイデアはありますか?
#!/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!"
ベストアンサー1
私が正しく理解した場合、シェルスクリプトは入力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
ループを介して与えられたファイルを1行ずつ読みますwhile
。read
すべての改行で停止します(デフォルト、ここで使用されます)。行が始まると、ユーザーにメッセージが表示され、その入力は変数(プログラムからコピー)#EXTIF:
に保存されます。$varnumber
その後、変数は次$Line
のように結合されます。
${Line%% *}
:文字列の先頭から$Line
最初のスペースまで。- 文字通りスペース。
tvg-chno=\"${varnumber}\"
チャンネル番号を含む文字列。- 文字通りスペース。
${Line#* }
$Line
: 最初のスペースから始まる文字列です。
$Line
これにより、変更の有無にかかわらず、変数の内容が出力ファイルに追加されます。