lup*_*p3x 6 text-processing dwm
我正在尝试将 Spotify 中播放的当前曲目放入我的 dwm 状态栏中。我已经到了使用此命令获取信息的地步。
enter code heredbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata'
Run Code Online (Sandbox Code Playgroud)
结果是这样的:
method return sender=:1.0 -> dest=:1.15 reply_serial=2
variant array [
dict entry(
string "mpris:artUrl"
variant string "http://open.spotify.com/thumb/45656b0961cba1598d127c3404ad276acb8e961b"
)
dict entry(
string "mpris:length"
variant uint64 308000000
)
dict entry(
string "mpris:trackid"
variant string "spotify:track:7oGXMMrB78C5tQhumQ2jfZ"
)
dict entry(
string "xesam:album"
variant string "Chopin"
)
dict entry(
string "xesam:artist"
variant array [
string "Frederic Chopin"
]
)
dict entry(
string "xesam:autoRating"
variant double 0.57
)
dict entry(
string "xesam:contentCreated"
variant string "2009-01-01T00:00:00"
)
dict entry(
string "xesam:discNumber"
variant int32 0
)
dict entry(
string "xesam:title"
variant string "Waltz No. 1 in E flat Major, Op. 18"
)
dict entry(
string "xesam:trackNumber"
variant int32 8
)
dict entry(
string "xesam:url"
variant string "spotify:track:7oGXMMrB78C5tQhumQ2jfZ"
)
]
Run Code Online (Sandbox Code Playgroud)
所以我的问题是我如何从这个结果中获取字典条目“xesam:artist”和“xesam:title”,以便我可以把它放在我的状态栏中?
如果它是格式良好的 JSON,那么这会简单得多,然后您可以使用jshon之类的工具来智能地询问数据。
可以使用awk
,但取决于一致的输出:
awk 'BEGIN {RS=" entry\\("; FS="\""}; /artist/ {artist = $4}; /title/ {title = $4} END { print artist": "title}' spotify_output
Frederic Chopin: Waltz No. 1 in E flat Major, Op. 18
Run Code Online (Sandbox Code Playgroud)
RS
本质上,通过将记录分隔符 ( ) 更改为各个条目块 ( ) 来分解文件entry(
,并通过将字段分隔符 ( FS
) 从默认值(空格)更改为引号 ( "
)来分隔这些记录中的字段。包含您正在寻求的价值观。
从那里开始,它只是模式匹配(例如,/artist/
)。