获取最后一个斜线之前的一行部分

rar*_*rgh 9 grep text-processing cut mpd

我正在尝试编写一个 conky 脚本来显示我的 MPD 专辑封面,专辑文件夹中的“folder.jpg”。我目前的计划是使用mpc -f %file%,它会打印出文件名和路径,然后切出实际的文件名(即最后一个 / 之后的所有内容),并将其用作 conky 图像对象的路径。

我在使用 grep/cut 时遇到了麻烦,特别是因为有些歌曲嵌套在两个文件夹中,而另一些则嵌套在一个文件夹中。(grep -m 1 . |cut -f1 -d /适用于单文件夹相册)

我该怎么办?有没有我想念的更简单的方法?

Vol*_*gel 10

您可以使用sed删除其余部分 -以最后一个斜杠开头的所有内容

mpc -f %file% | head -1 | sed 's:/[^/]*$::'

该模式/[^/]*$匹配一个斜杠,后跟除斜杠以外的任何字符,直到行尾。它被空字符串替换。
head -1忽略下面我们希望线条一些状态输出-但请参阅下面如何不摆在首位普林他们。

如果您不习惯 sed,该命令可能会因为:使用而显得异常。您之前可能已经看过sed带有/as 分隔符的命令,例如's/foo/bar/'- 我更喜欢使用分隔符:来提高可读性,因为表达式包含/自身。或者,我们可以/在表达式中转义:'s/\/[^\/]*$//'- 这不会使其更具可读性。


您使用它的方式为您提供mpc了两个额外的状态行。-q静音选项关闭所有输出。您需要结合-q显式打印当前播放文件以获得所需的行,仅此而已:

mpc -q -f %file% current | sed 's:/[^/]*$::'

不是删除以最后一个斜杠开头的所有内容,而是可以在最后一个斜杠之前显式打印所有内容

mpc -q -f %file% current | sed 's:^\(.*\)/.*$:\1:'

匹配任何后跟 a/和任何其他字符的字符;它尽可能匹配,以便/匹配的将是最后一个。