sed 命令中那些特殊字符的用途是什么?

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 传输其余命令,但我不明白其余部分,甚至不明白这些修饰符的名称。

答案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':将除最后一个目录之外的所有路径组件替换为--.准确地说,替换任何 char except of ,-后跟任何 char except of/重复零次或多次,然后后跟/
  • -e 's/^/ /': 在行首添加3个空格
  • -e 's/-/|/': 首先替换-|

从解析命令开始,此代码片段存在许多“问题” ls,但抛开这一点,您可以sed以更紧凑的方式重写部分:

ls -R | grep ":$" | sed -e 's/:$//;s/[^-][^\/]*\//--/g;s/^/   /;s/-/|/'

相关内容