从unix树中删除路径前缀

 121飒飒 发布于 2023-02-10 10:20

我在UNIX命令中有一个要求,我有一个类似于此的路径:

path/to/file/manyfiles.extensions

现在我想要输出类似于 -

file/manyfiles.extensions

现在我可以这样做列出/ path/to和/ path逐个删除它们.

但我可能只得到"/ path/to"作为我的输入,我必须在一个命令中从树中删除它们.

您可能认为我可以列出要删除的2个文件夹,但在很多情况下我得到的结构有12-13个子文件夹,在许多情况下我只需要第一个和最后一个文件夹.

例如 - `源文件 - 目标/类/

删除前缀 - 目标`

结果:

classes/my/code/HelloWorld.class
classes/my/code/HelloWorldImpl.class
classes/my/code/Main.class

小智.. 8

如果我正确理解您的问题,您想要删除路径上的某个给定前缀.给定声明path=/a/path/to/a/directory和模式,*a/您可以在Bash中以两种方式剥离匹配该模式的前缀:

echo ${path#*a/}    # outputs "path/to/a/directory"
echo ${path##*a/}   # outputs "directory"

第一个变体是非贪婪的并且在第一个匹配时停止,而第二个变体是贪婪的并且在模式的最长可能匹配处停止.这里的模式*a/在out路径中出现两次,因此结果是不同的.

在你的情况下,模式将是path/to和路径一样path/to/file/manyfiles.extensions,所以下面的一个将起作用,这取决于你是否需要贪婪:

path=path/to/file/manyfiles.extensions
path=${path#*path/to/}   # assigns "file/manyfiles.extensions" to $path

要么

path=path/to/file/manyfiles.extensions
path=${path##*path/to/}  # assigns "file/manyfiles.extensions" to $path

供参考,请阅读Bash参数扩展.

1 个回答
  • 如果我正确理解您的问题,您想要删除路径上的某个给定前缀.给定声明path=/a/path/to/a/directory和模式,*a/您可以在Bash中以两种方式剥离匹配该模式的前缀:

    echo ${path#*a/}    # outputs "path/to/a/directory"
    echo ${path##*a/}   # outputs "directory"
    

    第一个变体是非贪婪的并且在第一个匹配时停止,而第二个变体是贪婪的并且在模式的最长可能匹配处停止.这里的模式*a/在out路径中出现两次,因此结果是不同的.

    在你的情况下,模式将是path/to和路径一样path/to/file/manyfiles.extensions,所以下面的一个将起作用,这取决于你是否需要贪婪:

    path=path/to/file/manyfiles.extensions
    path=${path#*path/to/}   # assigns "file/manyfiles.extensions" to $path
    

    要么

    path=path/to/file/manyfiles.extensions
    path=${path##*path/to/}  # assigns "file/manyfiles.extensions" to $path
    

    供参考,请阅读Bash参数扩展.

    2023-02-10 10:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有