这是我的脚本的一部分:
mpv https://www.youtube.com/playlist?list=PLNQL50H--29oy5MOaxEVjcxhX-5Vvskji --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo > data.txt
以下是打印到文件的示例:
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
我想要的只是 YouTube 视频 ID ' a-XXr1H1FeI
' - 位于 ' Playing: ytdl://
' 之后。每个 id 都是数百首播放列表中的一首歌曲,我有几个播放列表。
我想将当前歌曲 ID 保存在文件中。这将允许我使用 youtube-dl 获取歌曲标题并使用 conky 显示它。如果我跳过一首歌曲,然后从我的 YouTube 播放列表中删除跳过的歌曲,以便更好地管理它们,我还可以使用它将 id 打印到另一个文件。
我从这里尝试了 sed 和 grep 解决方案:仅返回匹配模式之后的行部分他们什么也不会打印。
我正在使用播放列表;所以这个解决方案:使 mpv 在仅播放音频时显示 youtube 链接的名称不起作用。
这是我尝试用 sed 做的事情:
这不会产生任何结果。
mpv https://www.youtube.com/playlist?list=PLNQL50H--29oy5MOaxEVjcxhX-5Vvskji --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo | sed -n 's~^Playing: ytdl://\(.*\)~\1~p' > data.txt
这给了我我想要的 id,但直到我停止脚本。播放歌曲时我需要它们。
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://\(.*\)~\1~p' data.txt > out.txt
更新: 这实际上不起作用,但我认为它已经很接近了。
mpv $url --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo > ~/data.txt &
until [ "$1" = "q" ]
do
sed -n 's~^Playing: ytdl://\(.*\)~\1~p' ~/data.txt > ~/out.txt
> ~/data.txt
sleep 5
done
更新:data.txt > out.txt
当我更改为~/data.txt >> ~/out.txt
which 给我生成的 id 列表,而不是单个当前 id 时, 它有点起作用。我想我可以处理这个问题。另外,循环似乎并没有在 时停止"$1" = "q"
。我不确定这是怎么回事。不过,我找到了另一种方法来终止脚本。
这是整个脚本。 我可以按原样使用它,但这有点混乱。我会将其保留几天,如果没有人帮忙,则称其已解决。
`#! /bin/bash
myfifo=~/.config/mpv/mpv-fifo
案例“$1”
################################### 控制r) 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
;;
################################ 播放列表
### 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
;;
埃萨克
〜/out.txt
mpv $url --shuffle --no-video --input-file=~/.config/mpv/mpv-fifo > ~/data.txt &
until [ "$1" = "q" ]
do
sed -n 's~^Playing: ytdl://\(.*\)~\1~p' ~/data.txt >> ~/out.txt
> ~/data.txt
sleep 5
done
出口
`
答案1
很容易与sed:
sed -n 's~^Playing: ytdl://\(.*\)~\1~p' yourfile
a-XXr1H1FeI