[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