grep 的用法

 

#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 * 是隨機的任何字元