脚本应该将变量加 1,但结果却加了 2

脚本应该将变量加 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

短暂性脑缺血发作

答案1

您为每一行添加 1 $var,但仅当匹配时才这样做EXTINF:-1

使用如下方法跳过不匹配的行:

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

一些额外的提示:

  • 您可以直接运行 ,而cp file.tmp file不是。rm file.tmpmv file.tmp file
  • 使用$(...)它来代替被认为已弃用的反引号。

答案2

您将var在循环的每次迭代中增加它,因此在文件中的每一行也是如此。如果您只想为包含的每一行增加它EXTINF:-1,则可以使用 AWK 处理整个文件并删除 while 循环:

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

此处的变量channel保存了频道号,并且每次在该块中都会递增,该块仅在匹配的行上运行#EXTINF:-1

相关内容