【问题标题】:bash: use cat/grep with long argument listbash:使用带有长参数列表的 cat/grep
【发布时间】:2015-02-14 07:46:45
【问题描述】:

我在 bash 中有以下结构:

cat myfiles_* | grep "mystring" > summary.txt

如果文件太多,命令会失败并显示“参数列表太长”。

通常,人们会使用 xargs 来避免“参数列表太长”错误,但在这种情况下,文件必须连接起来,所以这不是一种选择。

还有其他方法可以从(太多)文件列表中过滤“mystring”吗?

【问题讨论】:

  • 找到... | xargs 猫 | grep ?
  • 为什么首先需要cat?如果问题是grep 在您给它一个文件列表时输出文件名,您可以使用-h 选项(即find . -name "myfiles_*" -maxdepth 1|xargs grep -h "mystring" > summary.txt)来抑制它。此外:为什么这是一个 bash 问题?它可以在 zsh 中工作吗?

标签: bash grep


【解决方案1】:

这样可以避免bash的globbing引起的“argument list too long”错误:

find . -name 'myfiles_*' -type f -exec grep "mystring" {} \; > summary.txt

您还可以为find 提供-maxdepth 1 选项,以防您不想遍历子目录。这与您的 cat myfiles_* 行为兼容。

【讨论】:

  • 您甚至可以使用-exec ... + 构造为许多文件只生成一个grep
【解决方案2】:

您不应该将cat 与本身读取数据的程序一起使用,请尝试:

grep "mystring" myfiles_* > summary.txt

你也可以试试awk

awk '/mystring/' myfiles_* > summary.txt

【讨论】:

    猜你喜欢
    • 2014-05-21
    • 1970-01-01
    • 2017-03-23
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 2015-06-25
    相关资源
    最近更新 更多