find . -type d -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
横跨在unix.com此命令行充当在UNIX tree命令来了。 我想有人解释这是什么sed命令正好做。 我无法理解语法
现在我知道基本的sed命令语法。 我仍然得到UNIX环境的窍门。
PS:命令完美的作品和讨论是在该论坛关闭。
find . -type d -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
横跨在unix.com此命令行充当在UNIX tree命令来了。 我想有人解释这是什么sed命令正好做。 我无法理解语法
现在我知道基本的sed命令语法。 我仍然得到UNIX环境的窍门。
PS:命令完美的作品和讨论是在该论坛关闭。
在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'