我在目錄樹中的文本文件中尋找字符串foo=
。 它在一臺普通的Linux機器上,我有bash shell: shell
grep -ircl "foo=" *
在目錄中還有許多匹配「foo =」的二進制文件。 因爲這些結果不相關而且減慢了搜索速度,我但願grep跳過搜索這些文件(主要是JPEG和PNG圖像)。 我該怎麼辦? bash
我知道有--exclude=PATTERN
和--include=PATTERN
選項,但模式格式是什麼? grep的手冊頁說: svn
--include=PATTERN Recurse in directories only searching file matching PATTERN. --exclude=PATTERN Recurse in directories skip file matching PATTERN.
搜索grep include , grep include exclude , grep exclude和variants沒有找到任何相關內容 工具
若是有一種更好的方法只在某些文件中進行grepping,我就是盡心盡力; 移動違規文件不是一種選擇。 我不能只搜索某些目錄(目錄結構很亂,隨處可見)。 另外,我沒法安裝任何東西,因此我必須使用經常使用工具(如grep或建議的查找 )。 spa
我是一個dilettante,授予,但這是個人〜/ .bash_profile看起來如何: 命令行
export GREP_OPTIONS="-orl --exclude-dir=.svn --exclude-dir=.cache --color=auto" GREP_COLOR='1;32'
請注意,要排除兩個目錄,我必須使用--exclude-dir兩次。 code
通過很長一段時間我發現了這個,你能夠添加多個包含並排除以下: ip
grep "z-index" . --include=*.js --exclude=*js/lib/* --exclude=*.min.js
使用shell globbing語法: 字符串
grep pattern -r --include=\*.{cpp,h} rootdir
--exclude
的語法是相同的。 擴展
請注意,使用反斜槓轉義星號以防止它被shell展開(引用它,例如--include="*.{cpp,h}"
,也能夠正常工做)。 不然,若是當前工做目錄中的任何文件與模式匹配,命令行將擴展爲相似grep pattern -r --include=foo.cpp --include=bar.h rootdir
,它只會搜索文件名爲foo.cpp
和bar.h
,極可能不是你想要的。
我發現grepping grep的輸出有時很是有用:
grep -rn "foo=" . | grep -v "Binary file"
雖然,這實際上並無阻止它搜索二進制文件。
find和xargs是你的朋友。 使用它們來過濾文件列表而不是grep的--exclude
嘗試相似的東西
find . -not -name '*.png' -o -type f -print | xargs grep -icl "foo="