Извлечение определенной строки текста с помощью grep для использования в conky

Я пытаюсь извлечь каталог текущей воспроизводимой песни в Quodlibet для использования при попытке отобразить обложку альбома в conky.

В текущем файле QL ~/.quodlibet/current есть строка, которая дает вам полный путь к текущей воспроизводимой песне, но мне нужен только каталог. Есть ли способ, которым я могу игнорировать последнюю часть пути с помощью grep?

Например, если у меня был файл с именем /music/album/03-song.oggЯ бы хотел, чтобы grep выводил все до 0 (или же 1/2/3/4 для более длинных альбомов).

Я понятия не имею, могу ли я использовать это для того, для чего мне это нужно, но все равно было бы полезно узнать это для дальнейшего использования.

4 ответа

Если current file содержит действительный путь к файлу, просто получите его имя каталога:

dirname $(< ~/.quodlibet/current)

$(< …) прочитает файл и заменит его содержимое, как если бы оно былоcat,

Вы на самом деле не хотите анализировать файл или использовать какие-либо регулярные выражения. Это может сломаться, если имя каталога содержит "0", например. Единственным надежным источником информации для определения каталога является последний слеш, и dirname так или иначе справляется.

Только потому, что мне нравится sed:) ... блестящее решение love @slhck!

$ echo /music/album/03-song.ogg| sed -r 's@^(.+)/.+$@\1@'
/music/album

Вы можете сделать это, отправив grep вывод на sed и используя регулярные выражения, чтобы извлечь информацию, которую вы хотите.

Вы можете прочитать на sed и его синтаксис регулярного выражения со страницы руководства.

quodlibet --print-playing "<~dirname>"
Другие вопросы по тегам