Grep

管道查找到 grep -v

  • April 26, 2021

我正在嘗試查找特定類型且不包含特定字元串的所有文件。我正在嘗試通過管道查找到 grep -v

例子:

find -type f -name '*.java' | xargs grep -v "something something"

這似乎不起作用。它似乎只是返回 find 命令找到的所有文件。我要做的基本上是找到與某個文件名匹配的所有 .java 文件(例如,以 SessionPb.java 中的“Pb”結尾)並且其中沒有“extendsSomethingSomething”。

我的懷疑是我做錯了。那麼命令應該是什麼樣子呢?

這裡沒有必要xargs。您還需要使用grepwith-L選項(不匹配的文件),否則它將輸出文件內容而不是其名稱,就像在您的範例中一樣。

find . -type f -iname "*.java" -exec grep -L "something somethin" {} \+

你真的差不多了…

find . -type f -iname "*.java" -print0 | xargs -0 grep -v "something something"

點“。” 說從這裡開始。(你的暗示它..但永遠不要假設)。

-iname使用不區分大小寫的搜尋,以防萬一(或不區分大小寫)。

-print0將帶有尾隨 \x00 字元的文件名發送到 xargs,這可以防止文件名中包含空格的問題。

xargs 上的“-0”表示期望以 \x00 結尾的文件名而不是返回。

和你的 grep 命令…

差不多明白了。


編輯::

從您的更新:

find . -type f -iname "*pb.java" -print0 | xargs -0 grep -iL "something"

應該有幫助。(從@rush的回答中添加了-L,幹得好)

我知道您的 grep 需要“-i”選項,或者不那麼明確。

嘗試部分命令… THIS 輸出的文件名是否正確?

find . -type f -iname "*pb.java"

如果是這樣,那麼您的問題可能是您的 grep 搜尋模式不匹配(拼寫錯誤?它發生了!),或者沒有任何匹配項。

絕對最壞的情況:

grep -riL "something" *

將做更多的工作來搜尋所有內容,但應該會給你一些輸出。

引用自:https://unix.stackexchange.com/questions/42407