使用sed和找到命令树的功能(Tree functionality using sed and fi

2019-10-20 05:00发布

find . -type d -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'

横跨在unix.com此命令行充当在UNIX tree命令来了。 我想有人解释这是什么sed命令正好做。 我无法理解语法

现在我知道基本的sed命令语法。 我仍然得到UNIX环境的窍门。

PS:命令完美的作品和讨论是在该论坛关闭。

Answer 1:

find命令只想找目录和打印。

sed命令如下:

sed -e 's;[^/]*/;|____;g;s;____|; |;g'
        ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^
         |               |
         |               replace ____| with  |
         replace everything up to the last / with ____

让我们来看看在行动一步一步的命令:

找到所有的目录和打印它的名字:

$ find . -type d -print 
.
./python
./python/mytest
./python/mytest2
./python/mytest2/bk
./python/mytest2/infiles
./bash
./bash/backup
./awk
./sed

取代一切到最后的/____

  • sed -e 's;[^/]*/;|____;g'被读出这样的:
    • [^/]* - >获得所有字符尽可能( * ),它们不同于/ 。 请注意, ^代表否定这里。
    • / - >匹配/
    • 鉴于块,以字符串替换它|____

看一个例子:

$ echo "hello/how/are/you" | sed 's;[^/]*/;;g'
you

$ echo "hello/how/are/you" | sed 's;[^/]*/;|____;g'
|____|____|____you

在这种情况下:

$ find . -type d -print | sed -e 's;[^/]*/;|____;g'
.
|____python
|____|____mytest
|____|____mytes2
|____|____|____bk
|____|____|____infiles
|____bash
|____|____backup
|____awk
|____sed

更换____||

$ find . -type d -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
.
|____python
| |____mytest
| |____mytest2
| | |____bk
| | |____infiles
|____bash
| |____backup
|____awk
|____sed

我们通常看到的sed这样的表达式:

sed 's/hello/bye/g'

但是你可以使用不同的分隔符,如果你怀疑/可能会有问题。 因此,在这种情况下,分隔符是;

sed 's;hello;bye;g'

最后,请注意:

sed -e 's;[^/]*/;|____;g;s;____|; |;g'
        ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^
         1st command     2nd command

意味着两个命令是要被执行的一个在另一个之后,所以它等效于:

sed 's;[^/]*/;|____;g' | sed 's;____|; |;g'


文章来源: Tree functionality using sed and find command
标签: unix sed tree find