Мне дан относительный путь, который спускается на n уровней глубоко, и я хочу создать "обратный" путь, который поднимается на то же количество уровней. Я хочу создать одинаковое количество уровней с пробелом или без него. Например:
dir/subdir/subsubdir should produce ../../..
dir/subdir/subsubdir/ should produce ../../../
Почему оператор плюс не может найти совпадение? Разве это не означает один или несколько символов без слеша?
$ echo dir/subdir/subsubdir | sed 's|[^/]+|..|g'
dir/subdir/subsubdir
тогда как однозначное совпадение, сопровождаемое сопоставлением звезд, работает:
$ echo dir/subdir/subsubdir | sed 's|[^/][^/]*|..|g'
../../..
даже с косой чертой:
$ echo dir/subdir/subsubdir/ | sed 's|[^/][^/]*|..|g'
../../../
FWIW, звездочка (*) будет работать вместо плюса (+):
$ echo dir/subdir/subsubdir | sed 's|[^/]*|..|g'
../../..
но тогда косая черта не сработает, потому что добавляет еще один уровень:
$ echo dir/subdir/subsubdir/ | sed 's|[^/]*|..|g'
../../../../..