Sie können sedden 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 -1ignoriert 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 sedBefehle 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, mpcbietet Ihnen zwei zusätzliche Statuszeilen. Die Option -qfür leise schaltet den gesamten Ausgang aus. Sie müssen -qdie 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.