2015-06-07 20 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