![sedコマンドで特殊文字の目的は何ですか? [閉鎖]](https://linux33.com/image/58112/sed%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%A7%E7%89%B9%E6%AE%8A%E6%96%87%E5%AD%97%E3%81%AE%E7%9B%AE%E7%9A%84%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
コンソールウィンドウでディレクトリツリーを生成するbashコマンドを見つけました。非常に役に立つと思いますが、すべての特殊文字がどのように機能するかはよく理解されていません。誰かが私がそれを壊すのを助けることができますか?
alias tree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'"
最初の2つはわかりやすいです。 bashでエイリアスを作成し、現在のディレクトリのファイルとフォルダを繰り返し一覧表示します。
1. alias tree=""
2. ls -R
しかしその後、私はほとんど迷った。私はそれがgrepとsedを通して残りのコマンドをパイプすることを知っていますが、残りのコマンドや修飾子の名前でさえ理解していません。
答え1
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'
:最後のディレクトリを除くすべてのパスコンポーネントをに置き換えます--
。特に、0回以上繰り返される文字を除くすべての文字と次の-
文字を置き換えます。/
/
-e 's/^/ /'
:行の先頭にスペースを3つ追加する-e 's/-/|/'
:まず次に-
交換|
このコードスニペットにはコマンドの構文解析から始めて多くの「問題」がありますが、ls
それを取り除いてsed
より簡潔な方法で部分を書き換えることができます。
ls -R | grep ":$" | sed -e 's/:$//;s/[^-][^\/]*\//--/g;s/^/ /;s/-/|/'