Muito fácil com sed :
sed -n 's~^Playing: ytdl://\(.*\)~~p' yourfile
a-XXr1H1FeI
Aqui está parte do meu script:
mpv https://www.youtube.com/playlist?list=PLNQL50H--29oy5MOaxEVjcxhX-5Vvskji --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo > data.txt
Veja um exemplo do que é impresso no arquivo:
Playing: https://www.youtube.com/playlist?list=PLNQL50H--29oy5MOaxEVjcxhX-5Vvskji
Playing: ytdl://a-XXr1H1FeI
(+) Audio --aid=1 --alang=eng (*) (vorbis 2ch 44100Hz)
AO: [pulse] 44100Hz stereo 2ch float
Tudo que eu quero é o ID do vídeo do youtube ' a-XXr1H1FeI
' - depois de ' Playing: ytdl://
'. Cada id é uma música de uma lista de reprodução de centenas e eu tenho várias listas de reprodução.
Eu gostaria de ter o id da música atual em um arquivo. Isso me permitirá pegar o título da música com o youtube-dl e exibi-lo com conky. Eu também posso usá-lo para imprimir o id para outro arquivo se eu pular uma música e, em seguida, apagar as músicas puladas das minhas playlists do youtube e, portanto, melhor selecioná-las.
Eu tentei as soluções sed e grep aqui: Retorna apenas a parte de uma linha após um padrão de correspondência e eles não imprimem nada.
Estou usando playlists; então esta solução: Faça o nome de exibição do mpv do link do youtube ao reproduzir apenas o áudio não funciona.
Veja o que tentei fazer com o sed:
Isso não produz nada.
mpv https://www.youtube.com/playlist?list=PLNQL50H--29oy5MOaxEVjcxhX-5Vvskji --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo | sed -n 's~^Playing: ytdl://\(.*\)~~p' > data.txt
Isso me dá os ids que eu quero, mas não até que eu pare o script. Eu preciso deles enquanto as músicas estão tocando.
mpv https://www.youtube.com/playlist?list=PLNQL50H--29o5FarbAFHBaUNRu2ipp4th --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo > data.txt
sed -n 's~^Playing: ytdl://\(.*\)~~p' data.txt > out.txt
Atualização: Isso não funciona, mas acho que está próximo.
mpv $url --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo > ~/data.txt &
until [ "$1" = "q" ]
do
sed -n 's~^Playing: ytdl://\(.*\)~~p' ~/data.txt > ~/out.txt
> ~/data.txt
sleep 5
done
Atualização:
Isso funciona quando eu altero data.txt > out.txt
para ~/data.txt >> ~/out.txt
, o que me dá uma lista dos IDs gerados, não o ID único atual. Eu poderia trabalhar com isso, suponho. Além disso, o loop não parece parar quando "$1" = "q"
. Eu não tenho certeza do que está acontecendo com isso. Eu encontrei outra maneira de matar o script embora.
Este é o script inteiro. Eu posso trabalhar com isso como é, mas é meio que um kludge. Vou deixar por alguns dias e depois resolvê-lo se ninguém ajudar.
'#! / bin / bash
myfifo = ~ / .config / mpv / mpv-fifo
caso "$ 1" em
################################### Ao controler) echo add volume 10 > $myfifo
;;
q) echo stop > $myfifo ; pkill pymp
;;
p) echo pause > $myfifo
;;
n) echo playlist-next > $myfifo
;;
l) echo add volume -10 > $myfifo
;;
################################# Listas de reprodução
### Sleep & Meditation ###
S) pkill mpv
url=https://www.youtube.com/playlist?list=PLNQL50H--29pkOIBTq6tsWSqdY8ur7Xms
;;
### Epic Trailer Music ###
E) pkill mpv
url=https://www.youtube.com/playlist?list=PLNQL50H--29oy5MOaxEVjcxhX-5Vvskji
;;
### Virtuoso Instrumental Guitar ###
G) pkill mpv
url=https://www.youtube.com/playlist?list=PLNQL50H--29o5FarbAFHBaUNRu2ipp4th
;;
### Old-time Blues ###
B) pkill mpv
url=https://www.youtube.com/playlist?list=PLNQL50H--29pth2mWWKcBQd7YbVClBvea
;;
### Jazz Noir ###
J) pkill mpv
url=https://www.youtube.com/playlist?list=PLNQL50H--29pagSz1i0BG7-30knwiUNXH
;;
### Classic Rock ###
R) pkill mpv
url=https://www.youtube.com/playlist?list=PLNQL50H--29rjmhFC4SqiTQa4jp-NEUN8
;;
esac
~/out.txt
mpv $ url --shuffle --no-video --input-file = ~ / .config / mpv / mpv-fifo > ~ / data.txt &
until [ "$1" = "q" ]
do
sed -n 's~^Playing: ytdl://\(.*\)~~p' ~/data.txt >> ~/out.txt
> ~/data.txt
sleep 5
done
sair
'
Muito fácil com sed :
sed -n 's~^Playing: ytdl://\(.*\)~~p' yourfile
a-XXr1H1FeI
Tags grep youtube-dl awk sed mpv