2009-07-30 96 views
23

当我使用命令:使用grep来搜索find所提供的文件:find有什么问题。 | xargs grep'...'?

find . | xargs grep '...' 

我得到错误的比赛。我正试图在当前文件夹中的所有文件中搜索字符串...

+3

你有更多的例子吗? – 2009-07-30 06:28:33

+4

那么首先,你必须正确地学习如何提出问题。从技术上讲,它没有任何问题。问题是你想要做什么。正确和清楚地描述它 – ghostdog74 2009-07-30 06:29:52

+0

你的意思是,我得到的答案是什么? – cupakob 2009-07-30 06:30:58

回答

37

安迪说白了,你有为了匹配平原.,或逃避点使用fgrep

所以,你必须写(-type f是只有这些文件:你显然不希望的目录。):

find . -type f | xargs fgrep '...' 

,或者如果你仍然想使用grep:

find . -type f | xargs grep '\.\.\.' 

如果你只希望当前目录,而不是它的子目录:

find . -maxdepth 1 -type f | xargs fgrep '...' 
+2

'grep -F'...''也应该可以工作 – Hasturkun 2009-07-30 07:38:30

+2

@Hasturkun:是的。我只是倾向于选择不同的命令名称而不是额外的选项(比如使用'gunzip'而不是'gzip -d')。通常只是一个品味问题。 – 2009-07-30 08:46:53

2

如果你的字面输入为grep '...',你可以匹配任何字符串。我怀疑你实际上是在为你的grep命令输入'...',但如果你是,...将匹配任何三个字符。

请发布有关您正在搜索的内容的更多信息,也许有人可以帮助您解决更多问题。

1

如果你正在寻找一个匹配,尝试:

find . -name "filename pattern" 

find . | grep "filename pattern" 

如果您寻找寻找文件那场比赛(即它包含了grep字符串)

find . | xargs grep "string pattern" 

工作正常。或者干脆:

grep "string pattern" -R * 
+0

是的,我正在查找包含“...”作为字符串的文件,但是: 1. find。 | xargs grep“string pattern” 或 2. grep“string pattern”-R * 没有帮助。 – cupakob 2009-07-30 06:39:09

7

'。'匹配任何字符,所以你会发现所有包含3个或更多字符的行。

您可以逃脱点,像这样:

find . | xargs grep '\.\.\.' 

或者你可以使用fgrep一样,它做了字面上的匹配,而不是一个正则表达式匹配:

find . | xargs fgrep '...' 

(有些grep的版本也接受一个-F标志,这使得它们的行为就像fgrep一样。)

-1

要完成杰里米的答案,你也可以试试

find . -type f | xargs grep 'your_pattern' 

find . -type f -exec grep 'your_pattern' {} + 

这是类似于xargs的

我想补充:RTFM!或者用更有礼貌的方式:用&滥用

man command 

+1

更有礼貌吗?阅读友好的手册?这怎么可能被认为是不礼貌的?有礼貌的怪胎。 :) – 2009-07-30 06:52:29

+0

手册页确实非常友好,并期待再次阅读。 (你让我的一天,杰里米XD) – 2009-07-30 07:00:23

+0

它越晚得到,我的评论似乎越是讨厌。我认为我现在在调峰。这一切都是从这里下坡。 – 2009-07-30 07:02:01

5

@OP,如果你正在寻找包含...文件,

grep -R "\.\.\." * 
+1

迄今最简单的解决方案。 grep具有内置的递归文件搜索。 – duckbrain 2013-12-16 21:33:44