Получить последние 3 папки из пути к папке - через косую черту - используя bash
У меня есть переменная х, установленная на текущий рабочий каталог. Например.
х = это / это / важно / папка / путь
Как мне пройти по этому пути в bash и получить только последние 3 папки, как указано ниже?
важно / папка / путь
Обратите внимание, что количество папок будет различным, но мне всегда нужны последние 3.
3 ответа
Там, наверное, множество способов сделать это. вот один
awk -F '/' '{printf "%s/%s/%s\n", $(NF-3), $(NF-2), $NF }'
Так как вы попросили решение для bash:
#!/bin/bash
string="this/is/an/important/folder/path"
pattern="^(.*\/){0,1}(.*\/.*\/.*)$"
[[ $string =~ $pattern ]]
echo "${BASH_REMATCH[2]}"
выход:
# ./test.sh
important/folder/path
Это может работать тоже
x=this/is/an/important/folder/path
IFS='/' xx=( $x )
IFS=$' \t\n'
l=${#xx[@]}
for i in $(seq $((l-3)) $((l-1)))
do
printf '/%s' "${xx[i]}"
done
printf '\n'
разбить на массив и затем распечатать последние 3 элемента