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
命令从标准输入中读取以空格分隔的文件名,然后使用这些名称作为参数调用命令。它可能需要多次调用您的命令
;除非您正在使用GNUxargs
并指定了-r
,您的命令将至少被调用一次,即使没有匹配的文件名
如果不使用xargs
,您将无法对此作业使用sed
。如果不使用xargs
,使用awk
会很笨拙。Perl(和Python)可以“轻松地”管理它;编写代码从标准输入中读取文件名,然后依次处理每个文件将很容易。不确定您要问什么。。。所有程序都可以从标准输入读取,即使默认情况下不从标准输入读取的程序也可以传递文件名/dev/stdin
。从标准输入读取文件。。。然后用它们做什么?一些文件解析程序做什么?显然,“你的问题把我弄糊涂了”现在是结束的理由。无论是ps
还是ls
都不会从标准输入中读取内容,这是一件无聊的事情。还有许多其他类似的程序——大多是一种或另一种类型的数据生成器——不读取标准输入:date
,who
,stat
。。。但你是对的,很多程序确实从标准输入读取数据。@JonathanLeffler-你是对的!我应该说“…读取输入但无法从标准输入读取的程序”。
grep -rl "{some_pattern" . | xargs your-command > a.out