转换外壳中的路径



我正在尝试在macOS中转换shell中的路径。有人知道如下转换路径的快速命令吗?

路径:/Users/nir/MongoDB/GitHub/mms/server/src/unit/com/xgen/svc/nds/aws/model/AWSHardedClusterDescriptionUnitTests.java

结果://server/src/unit/com/xgen/svc/nds/aws/model:AWShardedClusterDescriptionUnitTests

/server之前的部分用正斜杠替换,最后一个正斜杠用冒号替换,并删除文件扩展名。提前感谢!

这里有一种方法。

设置(在测试路径中添加空格(:

input='/Users/user/server/sub/dir s/fil e.java'
expect='//server/sub/dir s:fil e'
p=$input
printf 'before:    "%s"n' $p

使用zsh参数扩展标志:r(根(删除扩展:

p=${p:r}
printf 'root:      "%s"n' $p

通过head和tail参数展开获取dirname和basename标志,并添加冒号:

p=${p:h}:${p:t}
printf 'head/tail: "%s"n' $p

删除字符串CCD_ 3的第一次出现及其之前的所有内容,则准备//server:

p=//server${p#*server}
printf 'subst:     "%s"n' $p
[[ $p == $expect ]] && print 'It worked.' || print 'Error.'

将所有内容合并为一行:

p=$input
p=//server${${p:h}#*server}:${p:t:r}
printf 'all:       "%s"n' $p
[[ $p == $expect ]] && print 'Also worked.' || print 'Error.'

输出:

before:    "/Users/user/server/sub/dir s/fil e.java"
root:      "/Users/user/server/sub/dir s/fil e"
head/tail: "/Users/user/server/sub/dir s:fil e"
subst:     "//server/sub/dir s:fil e"
It worked.
all:       "//server/sub/dir s:fil e"
Also worked.

这些操作员中的大多数都记录在zshexpn手册页中。有点令人困惑的是,历史记录中描述了参数扩展标志膨胀段。

相关内容

  • 没有找到相关文章