Bash
sed 命令中這些特殊字元的目的是什麼?
我發現這個 bash 命令在您的控制台視窗中創建了一個目錄樹。我覺得它很有用,但我並不真正了解所有特殊字元的工作原理。有人可以幫我分解一下嗎?
alias tree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'"
前兩個很容易理解,這是在 bash 中創建一個別名,遞歸地列出目前目錄下的文件和文件夾。
1. alias tree="" 2. ls -R
但在那之後,我幾乎迷路了。我知道它正在通過 grep 和 sed 傳遞其餘的命令,但我不了解其餘的命令,甚至不了解這些修飾符的名稱。
alias tree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'"
ls -R
: 遞歸列出子目錄grep ":$"
: grep 僅適用於行:
尾的行sed -e 's/:$//'
: 刪除:
行尾-e 's/[^-][^\/]*\//--/g'
: 用 . 替換除最後一個目錄以外的所有路徑組件--
。準確地說,替換除 of 以外的任何字元,-
然後替換除/
重複零次或多次以外的任何字元,然後是/
.-e 's/^/ /'
: 在行首添加 3 個空格-e 's/-/|/'
: 先替換-
為|
這個片段從解析命令開始有很多“問題”
ls
,但拋開這個,你可以sed
用更緊湊的方式重寫部分:ls -R | grep ":$" | sed -e 's/:$//;s/[^-][^\/]*\//--/g;s/^/ /;s/-/|/'