Получить последние 3 папки из пути к папке - через косую черту - используя bash - PullRequest
0 голосов
/ 15 января 2019

У меня есть переменная x, установленная в текущем рабочем каталоге. Например.

x = это / есть / важно / папка / путь

Как мне пройти по этому пути в bash и получить только последние 3 папки, как указано ниже?

важный / папка / путь

Обратите внимание, что количество папок будет различным, но мне всегда нужны последние 3.

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Поскольку вы запросили решение для bash:

#!/bin/bash
string="this/is/an/important/folder/path"
pattern="^(.*\/){0,1}(.*\/.*\/.*)$"

[[ $string =~ $pattern ]]
echo "${BASH_REMATCH[2]}"

выход:

# ./test.sh
important/folder/path
0 голосов
/ 15 января 2019

Это тоже может работать

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 последних элементов

0 голосов
/ 15 января 2019

Вероятно, существует множество способов сделать это. вот один.

awk -F '/' '{printf "%s/%s/%s\n", $(NF-3), $(NF-2), $NF }'
...