Mit Bash und Regex:
s="/dir0/dir1/dir2/filename.ext" [[ $s =~ ([^/]*)/[^/]*$ ]] && echo "$"
Ausgabe:
dir2
Ich benutze Bash. Ich habe eine Reihe von Pfaden, /dir0/dir1/dir2/filename.ext
und ich möchte die Zeichenfolge dir2
in 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 $)
Mit Bash und Regex:
s="/dir0/dir1/dir2/filename.ext" [[ $s =~ ([^/]*)/[^/]*$ ]] && echo "$"
Ausgabe:
dir2
Ein anderer Weg mit Bash (auch zwei Schritte).
IFS=/ read -a array <<<'/dir0/dir1/dir2/filename.ext' echo $-2 )) ]} dir2
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 dir
und lastdir
zB: -
cut=$; cut=$
Sie haben nicht gesagt, dass Ihre Shell dies ist bash
, aber ich habe dies von Ihrem Codebeispiel angenommen.
Gelöst mit awk:
echo "/dir0/dir1/dir2/filename.ext" | awk -F'/' ''
Die Ausgabe von oben wird sein:
dir2