微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在bash中使用命令行utilsparsingvariables数组

获取正在播放的当前歌曲(使用DBus ),我使用以下命令:

dbus-send --print-reply --session --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata'

现在,下面的命令的输出如下所示:(为了清楚起见,简化了)

变体数组[

字典条目(

string“xesam:艺术家”

变体数组[

string“黑钥匙”

]

字典条目(

string“xesam:title”

变体string“给你的心”

]

输出有点长,我想从标题,艺术家等parsing它的具体价值。

谷歌search表示, 变种是一个stream行的数据types在组件对象模型中使用,所以我得到的是比使用sed / awk获取更好的方法 。 那么,我该如何去做呢?

狂暴完成Maven逃脱冒号

重命名所有文件在Linux中的一次性

Linux sedreplacestring – 有人可以解释这个错误

从工作目录运行UNIX程序?

wget:下载的文件

从python运行代码具有不同于bash的权限?

如何将linux命令输出存储到puppet中的一个variables中

安装cygwin后Git Bash破碎

java Runtime.getRuntime()。exec()无法运行命令

find* .tar然后提取删除文件

尝试这个

awk ' /string *"xesam:artist/{ while (1) { getline line if (line ~ /string "/){ sub(/.*string "/,"artist:",line) sub(/".*$/,"",line) print line break } } } /string *"xesam:title/{ while (1) { getline line if (line ~ /string "/){ sub(/.*string "/,"title:",line) print line break } } } ' variantArraySample.txt

给出输出

artist:The Black Keys title:Give Your Heart Away

这假设输入之间总是至少有一个线差,即

string "xesam:title" variant string "Give Your Heart Away"

也就是说,如果你的数据全部卷成一行,那么就需要更多的逻辑了

string "xesam:title" variant string "Give Your Heart Away"

(例如),将需要更改上述脚本。

让我知道如果你需要帮助进一步格式化您的需要输出

我希望这有帮助。

下面的作品不管是什么顺序“标题”或“艺术家”进来。唯一的限制是,它看到:title ,包含string的下一行必须是标题字符串; 那线路距离多远并不重要。 同样的艺术家

awk ' /:artist/{a=1;next} /:title/{t=1;next} a && /string/{ sub(/^.*string /,"") artist=$0 a=0; next } t && /string/{ sub(/^.*string /,"") title=$0 t=0;next } END{ printf("artist:%sn title:%sn",artist,title) }'

产量

artist:"The Black Keys" title:"Give Your Heart Away"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐