【问题标题】:Path of the current, parents and root directory当前目录、父目录和根目录的路径
【发布时间】:2015-08-22 07:44:16
【问题描述】:

我需要在 UNIX 中打印当前目录、父目录和根目录的路径。我可以使用命令或 shell 脚本。我设法为当前目录和父目录执行此操作,但我不知道如何为根目录打印它。

这是我所做的:

  • 当前:pwd
  • 家长:echo $(pwd) | sed -e s/\\/[^\\/]*$//

【问题讨论】:

  • 您能否提供一个示例路径以及您要查找的根目录是什么?
  • 例如在 /usr/home/dir 中的根目录是 /usr

标签: shell unix sed path pwd


【解决方案1】:

与@josifoski 相同的想法

pwd | sed ':a;\#/\(.*\)/[^/]*# {p;s##/\1#;ba}'

打印并循环直到只有第一个文件夹名称,每次循环删除路径的最后一个文件夹

【讨论】:

  • 这里有一些新想法,需要解释(学习),为什么以“\#”+1开头
  • 使用另一个分隔符而不是默认的/(通常是模式的一部分),转义第一个字符,指定这个字符是下一个模式的新分隔符,在这种情况下# ,同样的想法,但不需要在s### 中使用s 操作@
  • 对我来说新的是该组可以在地址参考中标记
  • 实际上像s// 这样的空搜索模式意味着,使用最后一个模式(不是正则表达式的内容,正则表达式本身)所以/./ s//t/;s//z/foo 将更改为tooand finaly到 zoo 更改第一个字母(f 上,t 下一个)
  • 你抓住了我!我很惭愧地问为什么 s##/\1# 有空模式,现在我明白了!
【解决方案2】:

我认为使用 awk 更容易做到这一点:

echo $(pwd) | awk 'BEGIN {FS=OFS="/"} {l=NF; while (i++<l-1) {print; NF--}}'

说明

这将打印当前 --> 根目录下的所有目录。它通过打印该行,然后递减NF(字段数)来实现这一点。请注意,我已将输入和输出字段分隔符设置为 /

【讨论】:

    【解决方案3】:

    gnu sed

    echo $(pwd) | sed -r -e 'p; :a; s#(.*)/.*#\1#; H; ta; x' | sed '/^$/d'  
    

    这将打印当前 -> 根目录下的所有目录

    它使用贪婪搜索'/'只保留左边部分,附加在保持空间中,ta是替代的条件分支,所以如果有一个它分支到:a,最后x将保持空间交换到模式空间.
    最后一个 sed 命令用于清除空行

    【讨论】:

    • 这不起作用。我遇到了一些错误,然后当前目录的路径打印了两次
    • 操作系统系统? sed 的版本?行复制/粘贴?在这里有效:)
    • 我在虚拟机上安装了免费的 bsd。我没有使用复制/粘贴,但该行正确写入
    • 现在可以用了吗? (在最后一个 sed 命令中删除了 \s)我认为那部分是不兼容的。 \s 代表空白,标准是 [[:space:]]
    • BSD sed 不会终止像 GNU sed 这样在分号处使用标签的命令。尝试pwd | sed -n -e ':a' -e '/./p; s#/[^/]*$##; ta' 请注意,每次使用标签名称时,-e 选项都会结束。
    猜你喜欢
    • 2020-06-02
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 2011-04-13
    • 2013-06-22
    • 2018-06-25
    相关资源
    最近更新 更多