Sie können sed
den Rest entfernen - alles beginnend mit dem letzten Schrägstrich :
mpc -f %file% | head -1 | sed 's:/[^/]*$::'
Das Muster /[^/]*$
entspricht einem Schrägstrich, gefolgt von allen Zeichen außer Schrägstrich, bis zum Ende der Zeile. Es wird durch die leere Zeichenfolge ersetzt.
Das head -1
ignoriert einige Statusausgaben, die der gewünschten Zeile folgen - aber siehe unten, wie man sie überhaupt nicht pringt.
Falls Sie nicht an sed gewöhnt sind, kann der Befehl aufgrund der :
verwendeten ungewöhnlich aussehen . Möglicherweise haben Sie zuvor sed
Befehle mit /
als Trennzeichen gesehen, z. B. 's/foo/bar/'
- Ich bevorzuge die Verwendung des Trennzeichens :
zur besseren Lesbarkeit, da der Ausdruck sich /
selbst enthält . Alternativ könnten wir dem /
im Ausdruck entgehen : 's/\/[^\/]*$//'
- das macht es nicht lesbarer.
Die Art und Weise, wie Sie es verwenden, mpc
bietet Ihnen zwei zusätzliche Statuszeilen. Die Option -q
für leise schaltet den gesamten Ausgang aus. Sie müssen -q
die aktuelle Wiedergabedatei explizit drucken, um die gewünschte Zeile zu erhalten, und nicht mehr:
mpc -q -f %file% current | sed 's:/[^/]*$::'
Anstatt alles zu entfernen , das mit dem letzten Schrägstrich beginnt , könnte man alles explizit vor dem letzten Schrägstrich drucken :
mpc -q -f %file% current | sed 's:^\(.*\)/.*$:\1:'
Dies entspricht allen Zeichen, denen ein /
und andere Zeichen folgen . Es stimmt so gut wie möglich überein, so dass das /
, was übereinstimmt, das letzte ist.
/
oder den Dateinamen ohne führende Verzeichnisteile? "Ausschneiden" ist mehrdeutig und wir haben es anders interpretiert.