[Linux/Mac] 搜尋資料夾底下 檔案內部文字

附了下面的用法,我比較常用

grep -lr "keyword" *

這個指令在Mac OSX/ linux 下都通用。grep 指令相關用法:

-a   --text   #不要忽略二進位制的資料。 將 binary 檔案以 text 檔案的方式搜尋資料 
 -A<顯示行數>   --after-context=<顯示行數>   #除了顯示符合範本樣式的那一列之外,並顯示該行之後的內容。   
 -b   --byte-offset   #在顯示符合樣式的那一行之前,標示出該行第一個字元的編號。   
 -B<顯示行數>   --before-context=<顯示行數>   #除了顯示符合樣式的那一行之外,並顯示該行之前的內容。   
 -c    --count   #計算符合樣式的行數。   
 -C<顯示行數>    --context=<顯示行數>或-<顯示行數>   #除了顯示符合樣式的那一行之外,並顯示該行之前後的內容。   
 -d <動作>      --directories=<動作>   #當指定要查詢的是目錄而非檔案時,必須使用這項引數,否則grep指令將回報資訊並停止動作。   
 -e<範本樣式>  --regexp=<範本樣式>   #指定字串做為查詢檔案內容的樣式。   
 -E      --extended-regexp   #將樣式為延伸的普通表示法來使用。   
 -f<規則檔案>  --file=<規則檔案>   #指定規則檔案,其內容含有一個或多個規則樣式,讓grep查詢符合規則條件的檔案內容,格式為每行一個規則樣式。   
 -F   --fixed-regexp   #將樣式視為固定字串的列表。   
 -G   --basic-regexp   #將樣式視為普通的表示法來使用。   
 -h   --no-filename   #在顯示符合樣式的那一行之前,不標示該行所屬的檔名稱。   
 -H   --with-filename   #在顯示符合樣式的那一行之前,表示該行所屬的檔名稱。   
 -i    --ignore-case   #忽略字元大小寫的差別。   
 -l    --file-with-matches   #列出檔案內容符合指定的樣式的檔名稱。   
 -L   --files-without-match   #列出檔案內容不符合指定的樣式的檔名稱。   
 -n   --line-number   #在顯示符合樣式的那一行之前,標示出該行的列數編號。   
 -q   --quiet或--silent   #不顯示任何資訊。   
 -r   --recursive   #此引數的效果和指定“-d recurse”引數相同。   
 -s   --no-messages   #不顯示錯誤資訊。   
 -v   --revert-match   #顯示不包含匹配文字的所有行。   
 -V   --version   #顯示版本資訊。   
 -w   --word-regexp   #只顯示全字符合的列。   
 -x    --line-regexp   #只顯示全列符合的列。   
 -y   #此引數的效果和指定“-i”引數相同。

自從改用Mac之後,很多之前Windows習慣使用的東西,都要重新學習在新的平台上怎麼去操作,這次是要找出某個資料夾裡的特定文字,並顯示其檔案名稱出來,Windows裡我都是請Notepad++ 來幫我找,現在Linux/Mac 的環境下就透過指令吧,Mac OS X 的 Finder 好像內建也有查檔案內容的樣子。

find . -exec grep -H "contango_get_image" {} \;
Screenshot 2016-05-12 10.11.30.png

find 指令我超常用的,因為預設是會找子目錄,要限定只有當層,記得多加 -maxdepth 1 參數。

我所使用的指令是:

find . -exec grep -H "contango_get_image" {} \;

是要在現行目錄下,找出有 contango_get_image 文字的檔案出來。

========================

find "path name" -name "file name" -exec grep -H "search content" {} \;

find原本是用「檔案名稱」來搜尋在哪些地方有這些檔案,將這些路徑結果餵給grep後,就可以拿來搜尋檔案內部的文字片段。

Ex:

find ./kernel -name "*.c" -exec grep -H "main" {} \;

以上這段指令,是要搜尋./kernel底下所有的.c檔,內容含有”main”的地方。

find的參數:

  • -name 要搜尋哪些檔名
  • -exec utility name [argument…] {} \;
    搜尋出的檔名 交給哪個執行檔(utility name)處理
    {} 會被find搜尋後的檔名路徑名稱所取代
    \; 代表exec的參數到此為止

grep的參數:

  • -H 列出搜尋到的檔案名稱路徑

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *