我正在尝试在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
手册页中。有点令人困惑的是,历史记录中描述了参数扩展标志膨胀段。