2014年2月20日 星期四

grep 的用法

Src:
http://www.ptt.cc/bbs/NTUEE_BL507/M.1300109278.A.222.html

Notes:

----------------
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 * 是隨機的任何字元 您可以使用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) ◆ From: 61.219.108.145

沒有留言:

張貼留言