Zeichenfolge zwischen den letzten beiden "/" - Symbolen

1473
Nisba

Ich benutze Bash. Ich habe eine Reihe von Pfaden, /dir0/dir1/dir2/filename.extund ich möchte die Zeichenfolge dir2in Bash extrahieren . Sie können davon ausgehen, dass sich das Wort, das ich extrahieren möchte, zwischen den beiden letzten /Zeichen befindet.

Ich versuche zu kombinieren ##und zwar %mit schlechten Ergebnissen.

Was ich versucht habe und nicht funktioniert, ist cut=${$##*/}.

Wie kann ich das machen?

Gelöst, aber nach Alternativen gesucht . Meine Lösung ist folgende:

cut=$(tmp=$; echo $)

1
`basename $ (direnname /dir0/dir1/dir2/filename.ext)` oder `echo /dir0/dir1/dir2/filename.ext | awk -F '/' '' ` Cyrus vor 6 Jahren 1

4 Antworten auf die Frage

2
Cyrus

Mit Bash und Regex:

s="/dir0/dir1/dir2/filename.ext" [[ $s =~ ([^/]*)/[^/]*$ ]] && echo "$" 

Ausgabe:

dir2 
2
Paulo

Ein anderer Weg mit Bash (auch zwei Schritte).

IFS=/ read -a array <<<'/dir0/dir1/dir2/filename.ext' echo $-2 )) ]} dir2 
was ist das "<<<"? Nisba vor 6 Jahren 0
@Nisba: Es ist ein [hier Zeichenfolge] (https://en.wikipedia.org/wiki/Here_document#Here_strings). Cyrus vor 6 Jahren 0
1
AFH

Sie müssen das Parsen in Schritten durchführen: -

path=/dir0/dir1/dir2/filename.ext dir=$ lastdir=$ 

Beim Versuch, beide Analysevorgänge zu kombinieren, haben Sie versucht, anstelle der Variablen in der zweiten Erweiterung eine Zeichenfolge zu verwenden. Dies wird nicht unterstützt.

Beachten Sie, dass Sie für beide den gleichen Variablennamen verwenden können dirund lastdirzB: -

cut=$; cut=$ 

Sie haben nicht gesagt, dass Ihre Shell dies ist bash, aber ich habe dies von Ihrem Codebeispiel angenommen.

1
Vipul

Gelöst mit awk:

echo "/dir0/dir1/dir2/filename.ext" | awk -F'/' '' 

Die Ausgabe von oben wird sein:

dir2