Bash

sed 命令中這些特殊字元的目的是什麼?

  • October 26, 2014

我發現這個 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/-/|/'

引用自:https://unix.stackexchange.com/questions/163906