1. 程式人生 > >[Linux]搜尋檔案是否包含指定內容並返回檔名

[Linux]搜尋檔案是否包含指定內容並返回檔名

在Linux系統中,find和grep都是很強大的命令,可以做很多很多事情,今天剛好有人問“如何查詢哪些檔案包含了特定字串,並顯示這些檔案的名稱”。

第一種方法:使用grep,假設搜尋所有的.cpp檔案是否包含'open'字串,如果包含了,則顯示該檔案,命令如下:

grep -rl 'open' . --include=*.cpp

則執行結果如下:

./test/testall/file.cpp
./test/testall/shell_test.cpp
./test/daemontest/main.cpp

但是有時候只顯示檔名,也不知道出現的地方到底是什麼樣子的,如果還有順帶檢視一下那一行的內容,可以用如下命令:

grep -rn 'open' . --include=*.cpp

則,執行結果如下:

./test/testall/file.cpp:270:    FILE *file = fopen(file_name.c_str(),"w");
./test/testall/file.cpp:273:            printf("Can't open the file\n");
./test/testall/shell_test.cpp:29:       FILE *file = fopen(file_name, "r");
./test/daemontest/main.cpp:53:  openlog("daemontest",LOG_PID,LOG_USER);


顯示了檔名,行號以及該行內容。

第二種方法:使用find命令+grep

假設搜尋所有的.cpp檔案是否包含'open'字串,如果包含了,則顯示該檔案,命令如下:

find -name '*.cpp' -exec grep -l 'open' {} \;

則結果如下:

./test/testall/file.cpp
./test/testall/shell_test.cpp
./test/daemontest/main.cpp