![使用 grep 提取文本中的特定行以供 conky 使用](https://linux22.com/image/1362785/%E4%BD%BF%E7%94%A8%20grep%20%E6%8F%90%E5%8F%96%E6%96%87%E6%9C%AC%E4%B8%AD%E7%9A%84%E7%89%B9%E5%AE%9A%E8%A1%8C%E4%BB%A5%E4%BE%9B%20conky%20%E4%BD%BF%E7%94%A8.png)
我正在尝试提取 Quodlibet 中当前播放的歌曲的目录,以用于在 conky 中显示专辑封面。
在 QL 中当前的文件~/.quodlibet/current
中有一行给出了当前播放歌曲的完整路径,但我只需要目录。有没有办法用 grep 忽略路径的最后一部分?
例如,如果我有一个名为的文件/music/album/03-song.ogg
,我只希望 grep 输出之前的所有内容0
(或1/2/3/4
更长的专辑)。
我不知道是否可以将它用于我需要的用途,但了解它对于将来的参考仍然很有用。
答案1
如果current
文件包含文件的有效路径,只需获取其目录名:
dirname $(< ~/.quodlibet/current)
将$(< …)
读取文件并替换其内容就像cat
。
您实际上并不想解析文件或使用任何正则表达式。例如,如果目录名称包含“0”,则这可能会中断。确定目录的唯一可靠信息来源是最后一个斜杠,dirname
无论如何都会处理它。
答案2
您可以通过管道传输grep
输出sed
并使用正则表达式来提取所需的信息来实现此目的。
sed
您可以从其手册页中了解其正则表达式语法。
答案3
只是因为我喜欢 sed :) ...喜欢@slhck 的绝妙解决方案!
$ echo /music/album/03-song.ogg| sed -r 's@^(.+)/.+$@\1@'
/music/album
答案4
quodlibet --print-playing "<~dirname>"