尋找 | grep 在 Cygwin 中不起作用

尋找 | grep 在 Cygwin 中不起作用

我安裝了 cygwin,當我使用此命令搜尋原始程式碼時,沒有顯示任何內容,即使我在文件中包含該字串

$ echo foo > bar
$ find . -name '*' | grep foo

什麼也沒有出現。該命令在 GNU+Linux 上運行良好。

$ grep foo bar

答案1

如前所述,find 將找到的檔案清單輸出到 stdout,如果以這種方式調用,grep 通常希望透過 stdout 進行搜尋。

也可以透過管道查找到xargs,它會“從標準輸入建置並執行命令列「,如

$ find . | xargs grep foo

如果你有瘋狂的文件名,帶有換行符之類的東西,那麼這會更好:

$ find . -type f -print0 | xargs -0 grep foo

並且只會找到常規文件,因此不會嘗試透過任何或任何目錄或「有趣」文件-type f進行 grep 。...

答案2

find . -name  '*' # This will produce a list of *file names*

然後,您將文件名列表傳遞到grep標準輸入,它將列表視為文字並蒐索foo

您沒有文件名,foo因此它不會返回任何內容。

要遞歸搜尋文件以查找文件中的文本,您可以簡單地使用

grep -R foo somefolder/

答案3

當我使用此命令搜尋原始程式碼時,沒有顯示任何內容

$ echo foo > bar
$ find . -name '*' | grep foo

find搜尋符合所需條件的檔案名稱:名稱、大小、檔案類型並傳回符合檔案名稱的清單。它不會返回內容的匹配文件。

grep當使用管道運算子傳遞該檔案名稱清單時,grep將看到字串bar(檔案名稱)和不是 foo(文件的內容bar)。

grep因此找不到匹配項,因此沒有任何輸出。

筆記:

  • grep可以直接搜尋文件。你不需要使用find. Pipes |,或xargs依照另一個答案中的建議。

以下命令適用於 Cygwin:

grep --exclude-dir=* "foo" ./*

例子:

DavidPostill@Hal /f/test
$ cat bar
foo

DavidPostill@Hal /f/test
$ grep --exclude-dir=* "foo" ./*
./bar:foo

進一步閱讀

  • Linux Bash 命令列的 AZ 索引- 與 Bash 命令列相關的所有內容的絕佳參考。
  • 尋找- 在資料夾層次結構中搜尋符合所需條件的檔案名稱:名稱、大小、檔案類型。
  • grep- 搜尋文件中的特定文字。

答案4

我想你想要這個。

find . -name '*' -type f -exec grep foo /dev/null {} \;

您只想 grep 文件,而不是目錄或特殊文件。 /dev/null 使 grep 顯示檔名。您可能想要刪除 '-name '*',但如果這樣做,點檔案將被 grep 。

你也可以運行

grep -r foo .

相關內容