Supponiamo di avere un file /from/here/to/there.txt
e di voler ottenere solo l'ultima parte della sua dirname to
anziché /from/here/to
, cosa devo fare?Come ottenere l'ultima parte di dirname in Bash
risposta
L'opposto di dirname
è basename
:
basename "$(dirname "/from/here/to/there.txt")"
Pure modo BASH:
s="/from/here/to/there.txt"
[[ "$s" =~ ([^/]+)/[^/]+$ ]] && echo "${BASH_REMATCH[1]}"
to
È possibile utilizzare basename
anche se non è un file. Togliere il nome del file utilizzando dirname
, quindi utilizzare basename
per ottenere l'ultimo elemento della stringa:
dir="/from/here/to/there.txt"
dir="$(dirname $dir)" # Returns "/from/hear/to"
dir="$(basename $dir)" # Returns just "to"
il comando '$ dir = "$ (dirname $ dir)"' non funziona per me, ma 'dir = "$ (dirname $ dir)" "funziona bene. –
Non avrei dovuto avere il dollaro di fronte a 'dir' quando lo sto impostando. –
Sì, ora tutto funziona correttamente. Grazie :) –
Utilizzando bash
funzioni stringa:
$ s="/from/here/to/there.txt"
$ s="${s%/*}" && echo "${s##*/}"
to
un altro modo
IFS=/ read -ra x <<<"/from/here/to/there.txt" && printf "%s\n" "${x[-2]}"
Più semplice da usare: 'printf"% s \ n "" $ {x [-2]} "'. –
@gniourf_gniourf, hai ragione, grazie. Modificato – iruvar
An awk
modo di farlo sarebbe:
awk -F'/' '{print $(NF-1)}' <<< "/from/here/to/there.txt"
Spiegazione:
-F'/'
set campo di separazione come "/"- stampare il secondo ultimo campo
$(NF-1)
<<<
usa nulla dopo come standard input (wiki explanation)
Questa domanda è simile a THIS.
Per la soluzione che si può fare:
DirPath="/from/here/to/there.txt"
DirPath="$(dirname $DirPath)"
DirPath="$(basename $DirPath)"
echo "$DirPath"
Come il mio amico ha detto che questo è possibile vedere:
basename `dirname "/from/here/to/there.txt"`
Al fine di ottenere qualsiasi parte del vostro percorso si potrebbe fare:
echo "/from/here/to/there.txt" | awk -F/ '{ print $2 }'
OR
echo "/from/here/to/there.txt" | awk -F/ '{ print $3 }'
OR
etc
Utilizzando Bash parameter expansion, è possibile effettuare le seguenti operazioni:
path="/from/here/to/there.txt"
dir="${path%/*}" # sets dir to '/from/here/to' (equivalent of dirname)
last_dir="${dir##*/}" # sets last_dir to 'to' (equivalent of basename)
Questo è più efficiente poiché non vengono utilizzati comandi esterni.
Ho appena provato questo. Su FreeBSD qui sono i miei risultati: Codice:! #!/Bin/sh cd/var/svn/repos percorso = "$ 1" echo "$ {path}" dir = "$ {path%/*} " echo" $ {dir} " actual =" $ {dir ## * /} " echo" $ {actual} " --------------- ------------------------- Risultati: $ ./makerepo.sh/var/test /var/test /var var $ ------------------------------------ Fai l! Scusate. Sembrava un buon metodo ma non una risposta corretta. –
Non importa. Ho appena realizzato cosa è successo! –
- 1. OS X bash: dirname
- 2. Come ottengo l'equivalente di dirname() in un file batch?
- 3. dirname() in C: il manuale è sbagliato?
- 4. Bash: estrarre parte di una stringa
- 5. Estrarre parte di una stringa in una variabile in bash
- 6. Come estrarre l'ultima parte della stringa in bash?
- 7. Come si ottiene la dirname di un file con Perl?
- 8. Come ottenere l'ennesimo argomento posizionale in bash?
- 9. Ottenere ultimo elemento in ordine di Bash
- 10. Qt. ottenere parte di QString
- 11. ottenere parte di std :: tuple
- 12. Come ottenere solo l'ultima parte di un percorso in Python?
- 13. Come posso ottenere una parte di una stringa in C++?
- 14. Ottenere risposta JSON come parte di Rest call in Java
- 15. ottenere funzionalità bash newgrp all'avvio
- 16. php come andare ad un livello superiore a dirname (__ FILE__)
- 17. Come annullare git rm -rf dirname senza un primo commit?
- 18. Come ottenere l'output di un comando bash in una variabile
- 19. Come ottenere variabile da file di testo in Bash variabile
- 20. Come possiamo ottenere l'unione di due array in Bash?
- 21. Come ottenere 'millisecondi' come parte del tempo in perl?
- 22. In bash, come usare una variabile come parte del nome di un'altra variabile?
- 23. ottenere una parte millisecondo di tempo
- 24. Ottenere il nome della directory del genitore eseguendo il piping dei risultati di nomedir a basename in uno script Bash
- 25. Come ottenere il numero di versione di bash
- 26. SSIS Come ottenere una parte di una stringa tramite separatore
- 27. Come ottenere la posizione del cursore in bash?
- 28. Come ottenere la prima lettera in una variabile Bash?
- 29. Come ottenere il penultimo argomento dal precedente comando bash? (in una shell bash interattiva)
- 30. Ottenere il genitore di una directory in Bash
Non funziona se il file non ha punti '.'. Non funzionerà se la directory ha il punto '.'. Mantieni la semplicità e usa la barra '/' come delimitatore. – alvits
corretto ora ... – anubhava
Grazie mille @Akshay – anubhava