So erhalten Sie mit einem Shell-Befehl den Teil der Teilzeichenfolge aus einem Verzeichnis

So erhalten Sie mit einem Shell-Befehl den Teil der Teilzeichenfolge aus einem Verzeichnis

Ich müsste nur die letzten beiden Teile aus dem folgenden Verzeichnispfad mit dem Shell-Befehl extrahieren

„Android/2.1/Pakete/test/debug/“

Erwartete Ausgabe: /test/debug

Dieser Pfad ist dynamisch und ändert sich bei unterschiedlichen Pfadwerten wie beispielsweise „Android/2/Pipeline/Packages/test/debug/“.

Ich konnte den spezifischen regulären Ausdruck nicht finden, der die letzten beiden Teile extrahieren kann, auch wenn sich der Rest des Pfadwerts ändert, d. h. nur „/test/debug“ erhält.

Ich bin dankbar, wenn mir jemand weiterhelfen kann

Danke

Antwort1

Ich nehme an, es gibt viele Ansätze, die Sie ausprobieren könnten (ersetzen Sie pwd durch etwas, das für Ihren Anwendungsfall geeignet ist):

echo /$(basename $(dirname $(pwd)))/$(basename $(pwd))

oder

pwd | awk -F/ '{print "/" $(NF-1) "/" $(NF)}'

Und wahrscheinlich auf unzählige andere Arten …

Antwort2

Die Shell kann dies indirekt mit Variablenmodifikatoren %, %%, #und tun ##. Diese entfernen die nachfolgende oder führende Übereinstimmung für das angegebene Muster. Beachten Sie, dass das Muster eine Shell istGlobus, kein regulärer Ausdruck.

Das folgende Beispiel gibt die letzten beiden Pfadelemente aus, mit oder ohne den optionalen abschließenden/

$ in="Android/2/Pipeline/Packages/test/debug/"
$ echo $( t=${in%/} && t=${t%/*/*} && echo ${in##$t} )
/test/debug/

verwandte Informationen