Sed Oneliner zum Abrufen des Dateinamens und des enthaltenen Verzeichnisses

Sed Oneliner zum Abrufen des Dateinamens und des enthaltenen Verzeichnisses

Ich muss den Dateinamen und das enthaltene Verzeichnis aus einem vollständigen Pfad extrahieren (DOS-Syntax). Ich muss dies mit sed tun, da es Teil eines größeren regulären Ausdrucks ist.

Beispieleingabe: ..\home\test\somedir\anotherdir\myfile.txt

Erwartete Ausgabe: anotherdir\myfile.txt

Für jede Hilfe wäre ich sehr dankbar.

Danke

Antwort1

Gehen Sie es einfach methodisch an. Sie möchten eine Zeile in drei Teile unterteilen: ein beliebiges Präfix .*und dann zweimal einen Backslash, gefolgt von Zeichen, die kein Backslash sind \\[^\\]*. Erfassen Sie, was nach dem vorletzten Backslash kommt, und lassen Sie den Rest weg.

printf %s "$dos_path" | sed 's/^.*\\\([^\\]*\\[^\\]*\)$/\1/'

(Vorsicht, echoeinige Shells erweitern Backslashes.)

Antwort2

Gibt es einen bestimmten Grund, awk nicht zu verwenden?

echo $DIR | awk -F'\' '{ print $(NF-1) "\\" $NF }'

verwandte Informationen