如何合并和分叉重导向?

9 views
Skip to first unread message

机械唯物主义 : linjunhalida

unread,
Mar 7, 2010, 8:32:48 PM3/7/10
to sh...@googlegroups.com
linux管道是一对一的,
比如一个语句: find|grep "\.py$"| echo

我需要两个命令的stdout都导向到另外的一个命令里面,完成类似于:
find|grep "\.py$"|  =>  
                                          echo
find|grep "\.pyw$"| =>

这样的功能。

还有就是如何把一个stdout出来的结果分别导出给2个命令做不同的处理?比如:
                  => | wget
cat xxx.txt
                  => | grep "\.mp3"
我知道可以利用临时文件的方式来完成,但是是否可以不用临时文件?

机械唯物主义 : linjunhalida

unread,
Mar 7, 2010, 8:48:53 PM3/7/10
to sh...@googlegroups.com
还有就是,xargs是把stdin的东西放在最后面的,怎么把他们都放在命令中间呢?
比如:find|grep "\.py$"| echo CCCCCC
我要把参数放在CCCCCC之前。

2010/3/8 机械唯物主义 : linjunhalida <linjun...@gmail.com>

机械唯物主义 : linjunhalida

unread,
Mar 7, 2010, 9:39:52 PM3/7/10
to sh...@googlegroups.com
上一个问题搞定了,使用 echo `find|grep py|xargs` CCCC

又有一个新的问题,如何利用grep去除某些模式。代码如下:
find|grep --exclude="ui\.py$" "\.py$"

但是还过滤不掉下面的文件:
./srcs/module1/ui/create_test_data_ui.py

2010/3/8 机械唯物主义 : linjunhalida <linjun...@gmail.com>

Chong Yang

unread,
Mar 8, 2010, 4:12:03 AM3/8/10
to sh...@googlegroups.com
"*\.py"

2010/3/8 机械唯物主义 : linjunhalida <linjun...@gmail.com>:

Chaos Eternal

unread,
Mar 8, 2010, 8:55:20 PM3/8/10
to sh...@googlegroups.com
1. find -name \*.py -or -name \*.pyc -print 即可

2. 除了直接或者间接使用临时文件(临时存储空间),别无他法

2010/3/8 机械唯物主义 : linjunhalida <linjun...@gmail.com>:

机械唯物主义 : linjunhalida

unread,
Mar 8, 2010, 9:48:30 PM3/8/10
to sh...@googlegroups.com
现在待解决的问题是:


又有一个新的问题,如何利用grep去除某些模式。代码如下:
find|grep --exclude="ui\.py$" "\.py$"

但是还过滤不掉下面的文件:
./srcs/module1/ui/create_test_
data_ui.py


2010/3/9 Chaos Eternal <chaose...@shlug.org>

Gary Shi

unread,
Mar 8, 2010, 10:23:12 PM3/8/10
to Shanghai Linux User Group

On Mar 8, 9:32 am, 机械唯物主义 : linjunhalida <linjunhal...@gmail.com>
wrote:


> linux管道是一对一的,
> 比如一个语句: find|grep "\.py$"| echo
>
> 我需要两个命令的stdout都导向到另外的一个命令里面,完成类似于:
> find|grep "\.py$"| =>
> echo
> find|grep "\.pyw$"| =>
>
> 这样的功能。

不是针对find,而是你这种模式:
(find|grep "\.py$"; find|grep "\.pyw$") | echo

>
> 还有就是如何把一个stdout出来的结果分别导出给2个命令做不同的处理?比如:
> => | wget
> cat xxx.txt
> => | grep "\.mp3"
> 我知道可以利用临时文件的方式来完成,但是是否可以不用临时文件?

不用临时文件,可能要自己写个程序做。

Lifeng Sun

unread,
Mar 8, 2010, 11:37:48 PM3/8/10
to sh...@googlegroups.com
--exclude参数用错了
--exclude=FILE_PATTERN skip files and directories matching FILE_PATTERN
注意是FILE_PATTERN。

然后grep有一个-v参数:
find | grep "\.py$" | grep -v "ui\.py$"

--

signature.asc

机械唯物主义 : linjunhalida

unread,
Mar 8, 2010, 11:47:26 PM3/8/10
to sh...@googlegroups.com
还是不理解为什么不能用exclude?有没有例子?

2010/3/9 Lifeng Sun <lifo...@gmail.com>

Bill

unread,
Mar 9, 2010, 12:12:54 AM3/9/10
to sh...@googlegroups.com
如果你想从目录的所有文件中找出包含 hello 的行。
你可以用 grep hello *, 这时你发现grep 会在一些图片或者pdf 文件里找,你
就可以用
grep hello --exclude="*pdf" *
来排除 pdf 文件。

--

机械唯物主义 : linjunhalida

unread,
Mar 9, 2010, 12:53:14 AM3/9/10
to sh...@googlegroups.com
原来是说文件阿,我还以为是输入呢。

2010/3/9 Bill <rhce.t...@gmail.com>

xxmplus

unread,
Mar 9, 2010, 7:32:49 PM3/9/10
to sh...@googlegroups.com
ls | tee file.txt | cat

2010/3/8 机械唯物主义 : linjunhalida <linjun...@gmail.com>:

--
Any complex technology which doesn’t come with documentation must be the best
available.

Reply all
Reply to author
Forward
0 new messages