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