grep時排除指定的文件和目錄


參考:
http://winterth.duapp.com/notes/ar03s04.html
http://blog.sina.com.cn/s/blog_7169c8ce0100qkyf.html

--exclude=FILE_PATTERN skip files and directories matching FILE_PATTERN --exclude-from=FILE skip files matching any file pattern from FILE --exclude-dir=PATTERN directories that match PATTERN will be skipped.

雖然help中說--exclude可以忽略文件和目錄,可是實際測試中發現並不能忽略目錄。所以,要排除目錄,還得用--exclude-dir

例如:

grep -rn --exclude-dir=build_* --exclude-dir=kernel --exclude-dir=drivers --exclude=*.out 'abcdefg' .
grep --exclude-dir=".svn" U_BOOT_CMD * -nR --exclude="cscope.out" --exclude="tags"

在當前目錄下查找所有abcdefg的字符串,但不在以build_開頭的目錄、kerneldirvers中查找,同時忽略所有以out為后綴的文件。

 

 


 

 

 

grep簡介(熟悉的同學可以直接省略這一部分):
    全稱是global search regular expression_r(RE) and print out the line,即全文搜索正則表達式,並把匹配的結果打印出來,是linux下非常強大的文本搜索工具。
    因為是命令行工具,它可以靈活地指定匹配模式、選項和要匹配的目標文件,如果結合linux下特有的管道命令" | ",其功能要比windows自帶的搜索工具和一些windows下文本編輯器強大很多。
 
    由於工作要求在linux環境下進行C++開發,接觸linux時間尚淺,沒有遇到一款功能較為齊全且較為順手的IDE,因此查看源代碼時很多功能需要手動在bash下完成,比如常常需要查看一個函數在整個源碼庫中的調用情況
    grep -r 'function_name' * 
    (*表示當前目錄下所有文件,-r表示遞歸查找,使用的模式較為簡單,僅作參考)
    由於現在的很多項目都使用subversion作為版本管理工具,因此每個源碼目錄下都會有一個.svn 目錄,其中包含了很多源碼信息。不出意外,你很快會得到滿屏幕的打印信息,但是其中大部分的信息都來自於 .svn 目錄下的文件。
    有如下兩種選擇可以去除來自 .svn 目錄的結果信息:
    1.使用管道進行雙層“過濾”,其中第二次grep使用了-v選項,即逆向匹配,打印出不匹配的行
    grep -r 'function_name' * | grep -v '.svn'
 
    2.或者更簡單一些,直接使用--exclude-dir選項,即指定排除目錄,注意svn前的 \.
    grep -r --exclude-dir=\.svn 'function_name' * 
 
    的確,通過簡單的選項設置,我們達到了過濾.svn目錄的功能,但是每次都要輸入 --exclude-dir=\.svn 的選項,似乎太麻煩了一點,幸運的是linux下靈活的配置文件可以解決這一切:
    
    打開 ~/.bashrc (這是bash的當前用戶配置文件),在文件的最上方添加這樣一條:
    export GREP_OPTIONS="--exclude-dir=\.svn" 
    (注意 = 的前后不能有空格,不然在載入該配置文件時會提示錯誤)
    export GREP_OPTIONS="--exclude-dir=\.svn --exclude-dir=\.git --exclude=tags --exclude=cscope\.out"
 
    保存並關閉,同時在命令行鍵入如下命令:
    source ~/.bashrc  (讓bash重新讀取腳本)
    當然,你也可以簡單地關閉shell並重新打開一個shell窗口
 
    這樣當你使用grep時,bash都會自動幫你附加--exclude選項,從而節省不少輸入的時間:)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM