2017-05-12 7 views
1

Ich versuche, eine oder zwei Zeilen Bash (die in einer Befehlszeile ausgeführt werden können) zu verwenden, um einen Ordnernamen zu lesen und die Version innerhalb des Namens zurückzugeben.Bash lesen Dateiname und geben Versionsnummer mit awk

Also wenn ich myfolder_v1.0.13 habe, weiß ich, dass ich echo "myfolder_v1.0.13" | awk -F"v" '{ print $2 }' verwenden kann und es wird mit 1.0.13 zurückkehren.

Aber wie bekomme ich die Shell den Ordnernamen und Rohr mit dem awk Befehl zu lesen, um mir das gleiche Ergebnis ohne echo zu geben? Ich nehme an, ich könnte immer zum Verzeichnis navigieren und die Ausgabe von pwd irgendwie in eine Variable übersetzen?

Vielen Dank im Voraus.

Edit: Sobald ich gefragt habe, habe ich es herausgefunden. Ich kann

result=${PWD##*/}; echo $result | awk -F"v" '{ print $2 }'

verwenden und es gibt mir, was ich will. Ich werde diese Frage für andere zurücklassen, bis jemand darauf hinweist, dass ich es abnehme.

+1

Es gibt keine "Ordner" in UNIX, der UNIX-Begriff für das, was Windows als "Ordner" bezeichnet "Verzeichnis" - diese Informationen erleichtern Ihnen das Lesen von UNIX-Tool-Dokumentation und finden/erkennen Werkzeuge, die funktionieren auf Verzeichnissen (zB 'dirname',' find. -type d', etc.). –

Antwort

1

Aber Sie brauchen überhaupt kein 10, hier verwenden Sie einfach bash Parameter Erweiterung.

string="myfolder_v1.0.13" 
printf "%s\n" "${string##*v}" 
1.0.13 
+1

Ja, das funktioniert auch! Vielen Dank! Ich bin froh, dass bash einige eingebaute Funktionen dafür hat. –

+0

@ChristopherSinclair: Beachten Sie, dass 'result = $ {PWD ## * /} | echo $ Ergebnis | awk -F "v" '{print $ 2}' wird nicht funktionieren. Sie müssen ein ';' nach dem ersten Befehl als 'result = $ {PWD ## * /}; echo $ Ergebnis | awk -F "v" '{print $ 2}' ' – Inian

+1

In Ordnung, danke dafür, ich werde sicher sein, es zu benutzen. –

1

können Sie verwenden

basename "$(cd "foldername" ; pwd)" | awk -Fv '{print $2}' 

die Schale bekommen Sie den Verzeichnisnamen zu geben, aber wenn Sie wirklich die Shell verwenden möchten, können Sie auch die Verwendung von awk vermeiden completetly: Unter der Annahme, Sie haben den Pfad zu dem Ordner mit der Versionsnummer im Parameter „FOLDER“:

echo "${FOLDERNAME##*v}" 

Dies entfernt den längsten Präfix den glob Ausdrucks „* v“ in dem Wert der Anpassungs Parameter FOLDERNAME.