Linux “如何使用”输出的文件名;grep“;作为另一个程序的参数

Linux “如何使用”输出的文件名;grep“;作为另一个程序的参数,linux,perl,sed,awk,grep,Linux,Perl,Sed,Awk,Grep,我有一个grep命令,它输出文件名(其中包含与某些模式的匹配项),我想用一些文件解析程序解析这些文件。管道链如下所示: grep -rl "{some-pattern}" . | {some-file-parsing-program} > a.out 如何将这些文件名作为命令行参数提供给文件解析程序 例如,假设grep返回文件名a,b,c。如何传递文件名,使其看起来像是在执行 {some-file-parsing-program} a b c > a.out ?我不知道有哪个li

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

grep -rl "{some-pattern}" . | {some-file-parsing-program} > a.out
如何将这些文件名作为命令行参数提供给文件解析程序

例如,假设
grep
返回文件名
a
b
c
。如何传递文件名,使其看起来像是在执行

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

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

在我看来,你似乎想要:

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


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

不确定您要问什么。。。所有程序都可以从标准输入读取,即使默认情况下不从标准输入读取的程序也可以传递文件名
/dev/stdin
。从标准输入读取文件。。。然后用它们做什么?一些文件解析程序做什么?显然,“你的问题把我弄糊涂了”现在是结束的理由。无论是
ps
还是
ls
都不会从标准输入中读取内容,这是一件无聊的事情。还有许多其他类似的程序——大多是一种或另一种类型的数据生成器——不读取标准输入:
date
who
stat
。。。但你是对的,很多程序确实从标准输入读取数据。@JonathanLeffler-你是对的!我应该说“…读取输入但无法从标准输入读取的程序”。
grep -rl "{some_pattern" . | xargs your-command > a.out