对由xargs生成的命令的各个结果执行grep

时间:2015-01-29 11:17:02

标签: linux bash grep clearcase xargs

是否可以grep xargs产生的命令的结果?

作为一个例子,我正在尝试以下命令

findbranch prj-xyz -latest|sed 's/^\(.*\/.*\)@@.*$/\1/'|xargs -I {} cleartool lsh {}|grep -m 1 'user'

但似乎grep正在findbranch返回的整个结果集上执行,而不是lsh的单个结果

作为一个例子我想从上面得到的是,对于findbranch和sed组合返回的每个文件,我想找到某个用户最后修改过的那个版本。

注意如果有问题,findbranch是一个内部实用程序。

3 个答案:

答案 0 :(得分:2)

这种做法怎么样?

.... | xargs -I {} bash -c "cleartool lsh {}|grep -m 1 'user'"

我想,这个答案对你来说是不言自明的......

答案 1 :(得分:0)

为什么不使用两阶段命令?

之类的东西
findbranch prj-xyz -latest|sed 's/^\(.*\/.*\)@@.*$/\1/' > /tmp/x ; for x in `cat /tmp/x`; do echo $x; done

一旦您看到$xxargs所需的输入,您就可以进一步操纵它了

答案 2 :(得分:0)

如果你有GNU Parallel,这应该可以工作:

findbranch prj-xyz -latest|sed 's/^\(.*\/.*\)@@.*$/\1/'|parallel cleartool lsh {}'|'grep -m 1 'user'

它仍会产生多个shell,但至少可以使用更多的CPU来处理它。