【发布时间】:2019-04-10 23:24:36
【问题描述】:
我在这个目录中:
/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"
有什么技巧吗?
【问题讨论】:
-
也许只是
sed 's,^/[^/]*/[^/]*/[^/]*,../../..,'? -
@WiktorStribiżew 它不能以预期的方式工作:$ pwd | sed 's,^/[^/]*/[^/]*/[^/]*,../../..,' ../../../project/test/my-utils /rel/0.1.0 我想有一个到 /home/michal/project/ 目录的相对路径。不知道我有多少子目录的东西。
-
所以它更像是“确定我需要爬回我的目录树多远,直到我到达所需的文件夹,这个数字是我需要连接多少
../以获得我的答案” -
这看起来有点像XY问题;仅使用绝对路径
/home/michal/project有什么问题?您可以通过${path%%/test/*}获得。 (我假设您知道test是“根”子目录。) -
试试
awk -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}"
标签: regex bash sed relative-path pwd