Bash

貓 * |grep something…結果在什麼文件中?

  • February 13, 2015

如果要執行以下命令

cat * | grep DATABASE

shell 會吐出 * 文件中包含該單詞DATABASE的所有行。有沒有辦法也吐出每一行是什麼文件?

我嘗試使用-Hgrep 的選項,根據man所說print the filename for each match,但在我的 shell 中它只是說

(standard input):$DATABASE_FUNCTION = dothis();

不要為此使用 cat 。而是直接使用grep DATABASE *grep -n DATABASE *(如果您想知道行號和文件名)。

請參閱cat 的無用用法

再澄清一點:cat *實際上將所有文件連接起來,因為它通過管道將它們提供給 grep,因此 grep 無法知道哪些內容屬於哪個文件,甚至無法真正知道它是在掃描文件還是你在只是打字很快。一旦使用管道,這就是一個大的標準輸入流。

最後,-H幾乎可以肯定是多餘的,因為當 grep 有多個文件要搜尋時,預設情況下會列印文件名。但是,如果您想解析輸出,它可能會有一些用處,因為*glob 有可能會擴展為單個文件,而 grep 在這種情況下會省略文件名。

引用自:https://serverfault.com/questions/285619