2009-07-30 47 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