我如何使用" grep"输出的文件名?作为另一个程序的参数

时间:2013-06-23 02:14:15

标签: linux perl sed awk grep

我有这个grep命令输出文件的名称(包含与某些模式的匹配),我想用一些文件解析程序解析这些文件。 pipechain看起来像这样:

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

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

例如,假设grep返回文件名abc。如何传递文件名,使其好像我正在执行

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

2 个答案:

答案 0 :(得分:9)

在我看来,好像你想要xargs

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

我不相信a.out是一个很好的输出文件名,但我们可以让它滑动。 xargs命令从标准输入读取空格分隔的文件名,然后使用这些名称作为参数调用your-command。它可能需要多次调用your-command;除非您使用GNU xargs并指定-r,否则your-command将被调用至少一次,即使没有匹配的文件名。

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

答案 1 :(得分:0)

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