BASH manipulacja stringami

0

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

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:

  1. Najlepiej będzie wyciągnąć to tak: basename $(dirname "$path")
  2. Jeśli wiesz dokładnie ile będzie segmentów, to możesz zrobić tak: echo "$path" | cut -d / -f 4
  3. 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) }' lub echo "$path" | rev | cut -d / -f 2 | rev
  4. Alternatywnie, możesz zrobić też tak: dirname "$path" | awk -F / '{ print $NR }' lub dirname "$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

1 użytkowników online, w tym zalogowanych: 0, gości: 1