使用 grep 提取文本中的特定行以供 conky 使用

使用 grep 提取文本中的特定行以供 conky 使用

我正在尝试提取 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>"

相关内容