我在这个目录中:
/home/michal/project/test/my-utils/rel/0.1.0
我想在Linux shell中获取相对于/home/michal/project/的路径:
../../..
我用sed尝试了一些事情,但是我没有成功创建正则表达式。例如其中的一个尝试:
pwd | sed -e "s/.*project\///g" | sed -e "s/[^\/]+/../g"
有什么技巧可以做到这一点吗?
我在这个目录中:
/home/michal/project/test/my-utils/rel/0.1.0
我想在Linux shell中获取相对于/home/michal/project/的路径:
../../..
我用sed尝试了一些事情,但是我没有成功创建正则表达式。例如其中的一个尝试:
pwd | sed -e "s/.*project\///g" | sed -e "s/[^\/]+/../g"
有什么技巧可以做到这一点吗?
您可以使用命令 realpath
:
realpath --relative-to=${PWD} /home/michal/project/
来自帮助页面:
--relative-to=FILE 将解析后的路径打印为相对于 FILE 的路径
man readlink
的“see also”中找到,但应该知道我们可以使用它来处理相对路径。 - Nahuel Fouilleul
sed 's,^/[^/]*/[^/]*/[^/]*,../../..,'
? - Wiktor Stribiżew../
数量,作为我的答案”。 - JNevill/home/michal/project
有什么问题吗?您可以使用${path%%/test/*}
获取该路径。(我假设您知道test
是“根”子目录。) - chepnerawk -F/ '{f=0;for(i=2; i<=NF; i++) {if($i!="project" && f==0) {printf "../"} else {if (f==0) {printf "../";f=1} else {printf $i "/"}}}}' <<< "${PWD}"
- Wiktor Stribiżew