С bash и регулярным выражением:
s="/dir0/dir1/dir2/filename.ext" [[ $s =~ ([^/]*)/[^/]*$ ]] && echo "$"
Выход:
dir2
Я использую Bash. У меня есть несколько путей, как /dir0/dir1/dir2/filename.ext
и я хочу извлечь строку dir2
в Bash. Вы можете предположить, что слово, которое я хочу извлечь, находится между двумя последними /
символами.
Я пытаюсь комбинировать ##
и %
с плохими результатами.
То, что я пытался и не работает, это cut=${$##*/}
.
Как я могу это сделать?
Решено, но в поисках альтернатив . Мое решение заключается в следующем:
cut=$(tmp=$; echo $)
С bash и регулярным выражением:
s="/dir0/dir1/dir2/filename.ext" [[ $s =~ ([^/]*)/[^/]*$ ]] && echo "$"
Выход:
dir2
Еще один способ с Bash (также два шага).
IFS=/ read -a array <<<'/dir0/dir1/dir2/filename.ext' echo $-2 )) ]} dir2
Вы должны сделать анализ поэтапно:
path=/dir0/dir1/dir2/filename.ext dir=$ lastdir=$
Пытаясь объединить обе операции синтаксического анализа, вы пытались использовать строку вместо переменной во втором расширении: это не поддерживается.
Обратите внимание, что вы можете использовать то же имя переменной для обоих dir
и lastdir
, например: -
cut=$; cut=$
Вы не сказали, что ваша оболочка есть bash
, но я предположил это из вашего примера кода.
Решил это с помощью awk:
echo "/dir0/dir1/dir2/filename.ext" | awk -F'/' ''
Выход выше будет:
dir2