【问题标题】:Perform grep on individual results of a command spawned by xargs对 xargs 生成的命令的单个结果执行 grep
【发布时间】:2015-03-28 14:22:14
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: linux bash grep clearcase xargs


    【解决方案1】:

    这种方法怎么样?

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

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

    【讨论】:

    • 是的,我明白你的意思。我只是想知道我们是否可以在不为每个输入行生成 shell 的情况下完成。但似乎这是唯一可能的选择
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-06-20
        • 2020-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 2014-07-09
        • 2016-08-11
        相关资源
        最近更新 更多