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
과 같이 결합됩니다.
${Line%% *}
: 문자열의 처음부터$Line
첫 번째 공백까지.- 말 그대로 공간.
tvg-chno=\"${varnumber}\"
채널 번호가 포함된 문자열입니다.- 말 그대로 공간.
${Line#* }
$Line
: 첫 번째 공백부터 시작하는 문자열입니다.
$Line
그러면 수정 여부에 관계없이 변수의 내용이 출력 파일에 추가됩니다.