M3U 재생 목록에 채널 번호 추가

M3U 재생 목록에 채널 번호 추가

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!"

[입력파일 예시]

예상 출력의 예

답변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루프를 통해 주어진 파일을 한 줄씩 읽 습니다 while. read모든 줄 바꿈에서 중지합니다(기본값, 여기에서 사용됨). 줄이 로 시작하면 사용자에게 메시지가 표시되고 해당 입력은 변수 (프로그램에서 복사됨) #EXTIF:에 저장됩니다 . $varnumber이후 변수는 다음 $Line과 같이 결합됩니다.

  1. ${Line%% *}: 문자열의 처음부터 $Line첫 번째 공백까지.
  2. 말 그대로 공간.
  3. tvg-chno=\"${varnumber}\"채널 번호가 포함된 문자열입니다.
  4. 말 그대로 공간.
  5. ${Line#* }$Line: 첫 번째 공백부터 시작하는 문자열입니다.

$Line그러면 수정 여부에 관계없이 변수의 내용이 출력 파일에 추가됩니다.

관련 정보