【问题标题】:delimit grep output from xargs从 xargs 分隔 grep 输出
【发布时间】:2020-07-17 17:50:29
【问题描述】:

有没有办法用 xargs 中的每个 arg 来分隔运行 grep 的输出? 我正在尝试运行这个:

echo 'pattern1\npattern2' | xargs -I{} grep -r '{}' *

对于上下文,我正在尝试测试目录中每个模式的存在;像这样:

#pattern exit_status
pattern1 0
pattern2 1 

我并不完全需要分隔符,但想要一个,因为它可以让我计算每个模式。如果有更好的方法来做到这一点,我也会对此持开放态度!

【问题讨论】:

    标签: bash grep xargs


    【解决方案1】:

    你可以这样运行:

    printf '%s\n' pattern1 pattern2 | xargs -I{} sh -c 'grep -rq "$1"; echo "$1 $?"' sh {}
    

    这将echo 每个模式及其递归grep 命令的退出状态。

    【讨论】:

    • 你能解释一下你在用sh做什么吗?以及 grep 引用的“$1”是什么?
    • 我将sh 与命令字符串一起使用,因为要执行的命令不止一个(grepecho),而单独使用xargs 无法做到这一点。 $1 是作为参数从xargs 传递的第一个参数(一个模式={})。
    • 关于sh 的最后一件事:您是先定义要运行的命令,然后使用结尾的sh {} 运行它吗?为什么我们不能将字符串替换从xargs 直接传递到命令字符串中?
    • 每个sh 调用只有一个参数,因此您可以在命令字符串中使用占位符:sh -c 'grep -rq "{}"; echo "{} $?"'。这是一个选择问题;)
    猜你喜欢
    • 1970-01-01
    • 2020-10-01
    • 2018-06-15
    • 2019-11-26
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    相关资源
    最近更新 更多