Сценарий, который должен добавить 1 к переменной, добавляет 2 вместо этого

Я нуждаюсь в помощи с простым сценарием, но что я получил, добавляет 2 к Переменной вместо 1. Я могу получить некоторую справку, таким образом, это - только 1?

var=1
while read -r LINE || [ -n "$LINE" ]; do
LINE=`echo $LINE | sed -e "s/EXTINF:-1/& tvg-chno=\"$var\"/"`
echo $LINE >> emby_iptv_tmp.m3u
var=$((var + 1))

Это - вывод, который я получаю, я хочу, чтобы каналы были 1,2,3,4

#EXTM3U
#EXTINF:-1 tvg-chno="2" tvg-ID="" tvg-name="AU: Fox NRL League HD" tvg-logo="" group-title="Sports",AU: Fox NRL League HD
http://.m3u8
#EXTINF:-1 tvg-chno="4" tvg-ID="Ginx Esports CA" tvg-name="CA: Ginx Esports TV" tvg-logo="https://upload.wikimedia.org/wikipedia/commons/thumb/3/30/GINX_Esports_TV_Logo.png/200px-GINX_Esports_TV_Logo.png" group-title="General Streams",CA: Ginx Esports TV
http://.m3u8
#EXTINF:-1 tvg-chno="6" tvg-ID="Golf Channel CA" tvg-name="CA: Golf Channel UHD" tvg-logo="http://cdn.cablefax.com/wp-content/uploads/2014/06/golf-logo.jpg" group-title="Sports",CA: Golf Channel UHD
http://.m3u8

1. "Рабочий Сценарий"

#!/bin/sh
: > emby_iptv.m3u
wget "Account login" -O iptv_download.m3u
var=1
while read -r LINE || [ -n "$LINE" ]; do
LINE=`echo $LINE | sed -e "s/EXTINF:-1/& tvg-chno=\"$var\"/"`
echo $LINE >> emby_iptv_tmp.m3u
var=$((var + 1))
done < iptv_download.m3u
cp emby_iptv_tmp.m3u emby_iptv.m3u
rm emby_iptv_tmp.m3u

TIA

0
задан 21 October 2018 в 00:59

2 ответа

Вы добавляете 1 к $var для каждой строки, но Вы хотите сделать так только, когда она соответствует EXTINF:-1:

используйте что-то как следующее для пропуска несогласующих отрезков длинной линии:

while read ...; do
    [[ "$LINE" =~ EXTINF:-1 ]] || continue
    ...
    <other commands>
done < iptv_download.m3u

Некоторые дополнительные подсказки:

  • Вместо cp file.tmp file и rm file.tmp можно просто работать mv file.tmp file.
  • Использовать $(...) вместо обратных галочек, которые считают устаревшими.
2
ответ дан 27 October 2019 в 07:51

Вы увеличиваете var для каждого повторения цикла, таким образом, для каждой строки в файле. Если Вы хотите увеличить его только для каждой строки, содержащей EXTINF:-1, Вы могли просто использовать AWK, чтобы обработать весь файл и удалить цикл с условием продолжения:

awk '/#EXTINF:-1/ {gsub(/EXTINF:-1/, "& tvg-chno=\"" ++channel "\"")} 1' iptv_download.m3u > emby_iptv_tmp.m3u

channel переменная здесь содержит номер канала и увеличена каждый раз в том блоке, который выполняется только на соответствии строк #EXTINF:-1.

2
ответ дан 27 October 2019 в 07:51

Другие вопросы по тегам:

Похожие вопросы: