2016-12-19 6 views
1

Stellen Sie sich einen Pfad wie folgt aus: /a/b/c/d/e/...Wie bekomme ich die ersten N Teile eines Pfades?

Wo ... weiter tief eine beliebige Anzahl von Ebenen sein könnte, also ich weiß nicht, vor der Zeit, ob es eine 2, 3 oder 13 weitere Ebene tief .

Wie kann ich mithilfe einer FreeBSD-Shell, z. B. /bin/sh, die ersten "N" Teile dieses Pfades extrahieren? z. B. die ersten 4 Stufen, so dass ich /a/b/c/d bekommen würde?

Antwort

2

können Sie cut verwenden:

s='/a/b/c/d/e/f/g/h/i/j/k' 
echo "$s" | cut -d/ -f1-5 
/a/b/c/d 

Oder wenn Sie verwenden BASH dann können Sie Shell-Array nutzen:

IFS=/ arr=($s) 

Dann gewünschten Elemente aus Array drucken:

IFS=/ echo "${arr[*]:0:5}" 
/a/b/c/d 
+0

Works auf macOS. Ich brauche es tatsächlich auf FreeBSD (/ bin/sh). Lass mich die Frage modifizieren, um das hinzuzufügen. – HanSooloo

+0

'echo" $ s "| cut -d/-f1-5 sollte auch unter FreeBSD funktionieren – anubhava

+1

Awesome, funktioniert wie ein Zauber. Ich weiß nicht, warum ich nicht daran denken konnte, die Pfeife umzudrehen! Wenn Sie das zu Ihrer Antwort hinzufügen könnten, ist es gut für zukünftige Referenz. – HanSooloo

Verwandte Themen