Witam,
Mam taki przypadek:
path="/Katalog1/Katalog2/Katalog3/plik.txt" chcę obciąć string żeby został tylko Katalog3. Samo plik.txt idzie łatwo obciąć w ten sposó ${path%/*} ale jak obciąć /Katalog1/Katalog2/ żeby został sam Katalog3 ?
0
0
Poradziłem sobie w ten sposób:
path="/Katalog1/Katalog2/Katalog3/plik.txt"
st=${path#/*/*/}
echo ${st%/*}
Idzie może to jakoś krócej zapisać bez stosowania zmiennej $st? W jednej linijce ?:)
1
Masz parę opcji:
- Najlepiej będzie wyciągnąć to tak:
basename $(dirname "$path")
- Jeśli wiesz dokładnie ile będzie segmentów, to możesz zrobić tak:
echo "$path" | cut -d / -f 4
- Jeśli nie wiesz ile dokładnie będzie tych segmentów, ale ma to być zawsze przedostatni, to:
echo "$path" | awk -F / '{ print $(NR - 1) }'
lubecho "$path" | rev | cut -d / -f 2 | rev
- Alternatywnie, możesz zrobić też tak:
dirname "$path" | awk -F / '{ print $NR }'
lubdirname "$path" | rev | cut -d / -f | rev
PS Zamiast robić jakieś miksy z ${path#/*/*/}
zdecydowanie lepiej użyć ${path##/*}
.
0
Dziękuję za odpowiedź.
"PS Zamiast robić jakieś miksy z ${path#/*/*/}
zdecydowanie lepiej użyć```bash ${path##/*}
."- Jeśli chodzi o ${path##/} to usunie cały string a ${path#//*/} zostawi Katalog3/plik.txt