首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用xargs和xargs -i时的细微差别

使用xargs和xargs -i时的细微差别
EN

Stack Overflow用户
提问于 2011-03-04 18:31:24
回答 3查看 8.8K关注 0票数 5

为什么find . -name "*.xml" | xargs grep FOO会返回与文件名匹配的内容,而find . -name "*.xml" | xargs -i -sh -c "grep FOO {}"不会?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-04 23:44:48

除非你的问题是拼写错误,否则在sh之前不应该有连字符

您没有在输出中获得文件名的原因是,grep是以单个文件作为参数运行的。要强制文件名输出,请使用-H

代码语言:javascript
复制
find . -name "*.xml" | xargs -I {} sh -c "grep -H FOO {}"

此外,用于xargs-i在版本4.2.9左右已弃用。您应该使用-I {}

票数 8
EN

Stack Overflow用户

发布于 2013-10-12 22:49:02

正如前面的回答所说,不同之处在于grep是为每个文件调用的,如果在命令行上只指定了一个文件,则grep不会报告文件名,除非给出了-H (--with- filename )标志。

为什么为每个文件调用grep?这是因为(不管您喜欢与否)对xargs使用-I (或-i)标志会强制对每个参数运行一次命令,就像对xargs使用标志"-L 1“一样。

在手册页中:

-I replace-str Replace occurrences of replace-str in the initial-arguments with names read from standard input. Also, unquoted blanks do not terminate input items; instead the separator is the newline character. Implies -x and -L 1.

票数 4
EN

Stack Overflow用户

发布于 2013-03-14 10:21:11

你可以直接使用

代码语言:javascript
复制
find . -name "*.xml" | xargs -I{} grep FOO {}

您可以根据需要在grep命令中使用-H-n

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5192564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档