thisPath="/Users/admin/Sites/codebase/projects/DrawingProject"
modifiedPath="$($thisPath|rev|cut -d '/' -f-2|rev)"
printf "[[[[[ $modifiedPath ]]]]]\n"在macOS BASH中,如何打印以下内容:
[[[[[ projects/DrawingProject ]]]]]现在我收到一个目录错误
谢谢。-Jonathan
发布于 2017-04-19 03:07:00
一种方法是使用awk
thisPath="/Users/admin/Sites/codebase/projects/DrawingProject"
modifiedPath=$(awk -F/ '{print $(NF-1)"/"$NF}' <<< $thisPath)
printf "[[[[[ $modifiedPath ]]]]]\n"输出:
[[[[[ projects/DrawingProject ]]]]]发布于 2017-04-19 04:08:27
如果您的bash支持参数展开
$ thisPath="/Users/admin/Sites/codebase/projects/DrawingProject"
$ echo "[[[[[ ${thisPath#${thisPath%/*/*}/} ]]]]]"
[[[[[ projects/DrawingProject ]]]]]要理解这一点,请考虑其中的不同部分:
$ echo "${thisPath%/*/*}"
/Users/admin/Sites/codebase%用于删除字符串末尾的最小匹配值。/*/*,因此这将删除包含/的/projects/DrawingProject,后面跟着任何字符,后面跟着/,再后面跟着任何字符。类似地,#允许从字符串的开头删除最小匹配。前任:
$ echo "${thisPath#/*/}"
admin/Sites/codebase/projects/DrawingProject将这两个概念结合起来:
$ echo "${thisPath#${thisPath%/*/*}/}"
projects/DrawingProject${thisPath%/*/*}将给/Users/admin/Sites/codebase//Users/admin/Sites/codebase/将被删除,我们将得到projects/DrawingProject发布于 2017-04-19 04:04:18
这是一个很好的答案。下面是使用basename和dirname的另一种方法
thisPath="/Users/admin/Sites/codebase/projects/DrawingProject"
printf "[[[[[ $(basename $(dirname $thisPath))/$(basename $thisPath) ]]]]]"https://stackoverflow.com/questions/43485600
复制相似问题