查找first.c和second.c兩個文件中含有void的行:grep void first.c second.c
查找當前目錄下所有c文件中含有void的行:grep void *.c
查找當前目錄下所有文件(不含子文件夾)中含有void的行:grep void * (遇到文件夾會產生警告信息)
查找當前目錄下所有文件(不含子文件夾)中含有void的行涕侈,忽略子文件夾產生的警告信息:grep void * -d skip
查找當前目錄下所有文件及其子文件夾中含有void的行拴清,并顯示行號:grep void -nr(-n是指顯示行號,-r是指遞歸遍歷文件夾)
查找指定文件夾Documents/codes/C下的所有文件及子文件夾含有void的行,并顯示行號:grep void -nr Documents/codes/C
查找指定文件夾Documents/codes/C下的所有文件及子文件夾含有單詞void的行啡捶,并顯示行號:grep void -nrw Documents/codes/C (-w是指匹配整個單詞)
正則表達式匹配:grep "[a-z]\{2\}" -nrw (查找含有兩個字母的單詞所在行和行號口蝠,{2}表示匹配兩次柿究,{}必須要轉義)
忽略二進制文件的匹配結果诉字,只顯示文本文件(-I多糠,大寫的i):grep "s\{2\}" -Inrw(查找ss)
查找當前文件夾及子文件夾下文件名為shm*.c中以shm開頭的單詞的行及其行號:grep "shm\w*" -Inrw --include=shm*.c
查找系統(tǒng)頭文件庫中指定函數名的函數聲明所在的頭文件和行數:
grep gtk_application_window_new -Inrw /usr/include/gtk-3.0/gtk(查找gtk_application_window_new函數的聲明)
grep g_signal_connect -Inrw /usr/include/glib-2.0/ --include=*.h (查找g_signal_connect的聲明累舷,只查找*.h頭文件)
grep g_application_run -Inrw /usr/include/glib-2.0/ --include=*.h(查找g_application_run的聲明)
grep g_signal_ -Inr /usr/include/glib-2.0/ --include=*.h(查找所有含有g_signal_的函數的聲明,注意沒有-w選項)
查找當前文件夾及子文件夾下的文件中調用了指定函數名函數的c文件和行數:
grep g_signal_ -Inr --include=*.c(函數名部分匹配夹孔,只查找c文件)
grep g_signal_connect -Inrw(函數名完全匹配)
查看當前目錄及子目錄下的所有文件:find
查找當前目錄及子目錄下所有的c文件的文件名:find -name "*.c"(文件名必須要加引號)
查看/usr/include/gtk-3.0/gtk目錄及子目錄下的所有文件:find /usr/include/gtk-3.0/gtk
查找/etc目錄及子目錄下所有的conf文件的文件名:find /etc -name "*.conf"
不僅顯示匹配行被盈,還要顯示后兩行(After):grep void -Inrw -A 2
不僅顯示匹配行,還要顯示前兩行(Before):grep void -Inrw -B 2
不僅顯示匹配行搭伤,還要顯示前后兩行(before and after):grep void -Inrw -C 2
大小寫不敏感:grep VOID * -i
奇淫技巧:當然這是我沒有使用任何編輯器只怎,同時也沒有安裝任何VIM插件的查找方式(本人習慣使用atom remoteftp 插件去處理)
磨刀不誤砍柴工,建議先看看Documentation/CodingStyle闷畸,這類問題可以用
grep -lr "struct task_struct {" [KERN_SRC_PATH]/*
來找答案尝盼,一般只要掃include 和arch/[ARCH]就可以了吞滞。
例如要查找:內核中進程對應的結構體task_struct的定義處佑菩,如下圖所示: