find & grep

找出檔案匣中大於 1 mb 的 docx 檔案並分頁呈現:

#find /usr/local/www/apache22/data/attachments/ -type f -size +1M -iname '*.docx' | more

找出 30 天內的新檔案

#find /path/folder/ -type f -mtime -30 | more

//註:find 找出 /path/folder/ 檔案匣中 -type 形式為 f 檔案 -mtime 日期 -30 少於三十 | more以分頁呈現

參考:

GREP 搜尋 http://carlsiu.pixnet.net/blog/category/2103435 說到:

如果只是想得知某段文字在那些檔案出現,可有間單點的辦法呢?

當然有,用 grep 就成了。平常以 grep 尋找一個檔案中的文字:

grep search_me file.txt

如果要在子資料夾間搜尋,可以用

grep -r search_me .

來完成,以 -r 來表示要遞迴子資料夾,而 . 則是代表由所在資料夾開始搜尋。

還可以用 --include 來指示目標檔案名稱:

grep -r --include="*.php" search_me .

或用 --exclude 來排除一些檔案:

grep -r --exclude="*.jpg" search_me .

找程式碼中有出現 name="viewport" 用單引號來帶,例:

grep -r  'name="viewport"' . 

grep 的用法 http://www.ptt.cc/bbs/NTUEE_BL507/M.1300109278.A.222.html 說到:

#grep [-a –v –i –n –v ] '搜尋的字串' filename

OPTIONS

-a : 把binary 檔案用 text 檔案的方式搜尋資料

-c : 計算找到 '搜尋字串' 的次數(count)

-i :  忽略大小寫的不同,也就是大小寫都會視為相同

-n : 輸出行號,在每行的前面加上行號ex:  1:  2:  3: (number)

-v : 反向選擇,也就是說顯示出沒有 '搜尋字串'內容的那一行(--invert-match)

-V : 大寫的V,顯示出來grep的版本跟相關的資訊(version)

 REGULAR EXPRESSIONS

 grep 是一個常見的指令主要用來作為字串比對用,可以用grep迅速的找出檔案中你所要

找的資料(grep 是一”整行”為單位來擷取資料的,所以擷取的時候是把你要的字串有包

含的那一行從秀出來

如果當中有[a-z]就表示a~z的任何一個字元都會被接受

ex :

先建立一個檔案 名稱為 test

#vi test

內容為

test 6

test 7

test 8

test 9

test 1

test 3

test 67

存檔後離開

用grep去抓這個當案中的字

#grep [66-68] ./test

#grep [66,68] ./test

這兩行的結果相同 (如下三行 )

test 6

test 8

test 67

你會發現,67被視為一組字元,可是前後的66,68被視為分該的兩個字元

所以 test 7 這一行字並沒有被顯示出來,所以再字串搜尋的時候需要特別的注意這樣的

問題,避免結果的錯誤產生

(P.S.這個是在Fedora 1 kernel 2.4.22 , grep version 2.5.1不同的版本可能有不同的

結果用之前還是需要小心)

ex2:

#vi test

1a

2b

3c

4d

5e

6f

7g

儲存後離開

#grep [ab-fg] ./test

#grep [a-g] ./test

這兩行都會出現全部的資料

#grep [c-fg] ./test

會出現以下

3 c

4 d

5 e

6 f

7 g

如果要特定的不連續的字串的時候可這樣用grep [135]

ex3:

用剛剛的test檔案測試一下

#grep [gab] ./test

#grep [g,a,b] ./test

都會出現以下

1 a

2 b

7 g

這樣就可以找到多組不連續的字串

DOS底下會有一些特殊的字符,可以用vi 與 cat -A 來看有那些不同

^M : 表示斷行的字符

^I : 表示<Tab>造成的按鍵符號

$ : 表示每一行行尾的意思

 特殊字元的用法

因為正規表示法(REGULAR EXPRESSIONS),有相當多的特殊字元的存在所以

要取消這些特殊字元的屬性時,就必須使用反斜線 \ 了

ex: 要搜尋含有 * 的特殊字元

#grep '\*' filename.txt

這樣才可以正確的找出 * 這個符號

#grep '*' filename.txt

也可以達到同樣的效果不過畢竟不是嚴謹的做法怕會有問題,所以還是用'\*'比較保險

正規表示法(REGULAR EXPRESSIONS)的特殊字元與grep指令

1 只搜尋行首的字元 ^word

   word是要搜尋的字元,並且是要在該行的行首

   ex :

   #grep '^ijk' test.txt

  找出test.txt行首為 ijk 的那一行,並顯示出來

2 只搜尋行尾的字元 word$

   word是要搜尋的字元,並且是要在該行的行尾

   ex :

   #grep 'ijk$' test.txt

  找出test.txt行尾為 ijk 的那一行,並顯示出來

3一個點 . 代表一個任意的字元,且一定要有一個

 ex :

 #grep 'a.d' filename.txt

 所有a and d中間有一個或多個字元的那一行

都會被顯示出來

4 ? 任意的字元(單一)

5 * 是隨機的任何字元

您可以使用grep (「global regular expression print」)命令在檔案中搜尋文字格式,

或顯示包含特定文字格式的檔案名稱。當您想在檔案或目錄中尋找資訊時,這個命令就極

為有用。

grep命令會檢視一或多個檔案中的每一行,以尋找與特定格式相符合的字串。當它找到符

合的字串時,會顯示該串文字所在的那一行。

在檔案中搜尋字串

假設您有一份名為mailist的郵遞清單,內容如下:

Smith, Joe     2345 Pine St.     Santa Clara, CA

Walsen, Stacey  493 Winkle Ave.  San Jose, CA

Diaz, Robert   6789 Pine St.     Santa Clara, CA

Wang, Michael  1832 Jackson St.  Santa Clara, CA

如果您想抽選所有住在Pine Street的人員住址,請輸入:

grep(1)

$ grep Pine mailist

grep命令會列出mailist中所有包含Pine字串的各行文字。輸出結果如下:

Smith, Joe     2345 Pine St.     Santa Clara, CA

Diaz, Robert   6789 Pine St.     Santa Clara, CA

在搜尋時若不限文字的大小寫,請搭配使用-i選項。例如:

$ grep -i pine mailist

搜尋多重檔案

在其他方面,grep命令也極為有用。例如,有時候您不確定要找的資訊究竟位於哪一個檔

案中。

假設您有三份郵遞清單,但是不記得哪一份包含了Stacey Walsen的住址。請輸入:

$ grep 'Walsen, Stacey' mailist mailist2 mailist3

mailist: Walsen, Stacey  493 Winkle Ave. San Jose, CA

The grep命令會顯示包含Stacey住址的那一行文字,以及其所在的檔案。請注意,因為字

串中包含空格,故應以單引號括住('Walsen, Stacey')。

若要在整個目錄中搜尋此項資訊,請輸入:

$ grep 'Walsen, Stacey' *

若需使用grep命令的相關資訊,請參閱《《HP-UX Reference》》的《grep》(1)線上援助

頁。

grep -r -i dpc . | less

-r:

代碼:

指定的目錄下的所有檔案和目錄

-i:

代碼:

字串不分大小寫

.:

代碼:

目前目錄

| less:

代碼:

不一次顯示,一頁一頁顯示

--

※ 發信站: 批踢踢實業坊(ptt.cc)