2015-06-07 19 views
3

我需要在UNIX中打印当前,父目录和根目录的路径。我可以使用命令或shell脚本。我设法为当前和父目录做到这一点,但我不知道如何打印它的根目录。当前,父母和根目录的路径

这里是我做了什么:

  • 电流:pwd
  • 父:echo $(pwd) | sed -e s/\\/[^\\/]*$//
+0

你能提供的示例路径,什么路径的最后一个文件夹,你找的根目录? – Grokify

+0

例如在/ usr/home/dir中,根目录是/ usr – user4859999

回答

3

GNU sed的

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

会打印出从当前所有目录 - >根

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

+0

,这不起作用。我得到了一些错误,然后当前目录的路径打印两次 – user4859999

+0

os系统? sed的版本?线拷贝/粘贴?在这里它的工作原理:) – josifoski

+0

尝试删除\ s在最后sed命令,所以只sed'/^$/d' – josifoski

1

我认为这是比较容易做到这一点使用AWK:

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

说明

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

1

相同的思路@josifoski

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

打印和循环,直到仅1文件夹名称,删除每个周期

+0

在这里一些新的想法,需要解释(学习),为什么它以“\#”开头+1 – josifoski

+0

使用另一个分隔符不是默认的'/'(通常当是模式的一部分时),转义第一个字符,指定这个字符是下一个模式的新分隔符,在这种情况下''',同样的想法,但不需要转义#s#' – NeronLeVelu

+0

对我来说也是这个组可以标记在地址参考 – josifoski