-1

我有这个grep命令输出文件的名称(其中包含与某些模式的匹配),我想用一些文件解析程序解析这些文件。管道链如下所示:

grep -rl "{some-pattern}" . | {some-file-parsing-program} > a.out

如何获取这些文件名作为文件解析程序的命令行参数?

例如,假设grep返回文件名a, b, c. 我如何传递文件名,这样就好像我正在执行

{some-file-parsing-program} a b c > a.out

?

4

2 回答 2

9

在我看来,您似乎想要xargs

grep -rl "{some_pattern" . | xargs your-command > a.out

我不相信a.out是一个好的输出文件名,但我们可以让那个幻灯片。该xargs命令从标准输入中读取以空格分隔的文件名,然后your-command使用这些名称作为参数进行调用。它可能需要your-command多次调用;除非您使用 GNUxargs并且您指定-r,your-command将至少被调用一次,即使没有匹配的文件名也是如此。

不使用xargs,您将无法sed用于此工作。没有 using xargs, usingawk会很笨拙。Perl(和 Python)可以“简单地”管理它;编写代码从标准输入读取文件名然后依次处理每个文件会很容易。

于 2013-06-23T02:32:38.260 回答
0

我不知道任何无法从标准输入读取的 linux 程序。根据程序,默认输入可能是标准输入,或者您可能需要通过使用命令行选项(通常单独)指定使用标准输入-。你有什么特别的想法吗?

于 2013-06-23T02:23:36.533 回答