find . -type d -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
在www.example.com上看到这个命令行unix.com,它在unix中充当树命令。我想有人解释一下sed命令到底在做什么。我无法理解语法现在我知道了基本的sed命令语法,还在摸索unix环境。PS:命令工作完美,讨论在该论坛关闭.
fjnneemd1#
find命令只是查找目录并打印它们。sed命令如下:
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'
1条答案
按热度按时间fjnneemd1#
find
命令只是查找目录并打印它们。sed
命令如下:让我们一步一步地看一下命令的执行过程:
查找所有目录并打印其名称:
将最后一个
/
之前的所有内容替换为____
:sed -e 's;[^/]*/;|____;g'
的读取方式如下:[^/]*
--〉获取所有可能的与/
不同的字符(*
)。注意,^
在这里代表否定。/
--〉匹配一个/
。|____
。请参见示例:
在这种情况下:
将
____|
替换为|
:我们通常看到
sed
表达式如下:但是如果你怀疑
/
可能有问题,你可以使用不同的分隔符。所以在这个例子中,分隔符是;
:最后,请注意:
意味着两个命令将依次执行,因此它等效于: