grep常見用法總結,grep總結
grep -E 'l\{2,\}' 2.txtgrep -E 'h(ell|a)o' test.txtgrep '[a-z]\{5,\}' test.txtgrep -xf a.txt b.txt //查詢a與b共同存在的行grep -vxf b.txt a.txt //查詢a的行不在b檔案裡面的,就是a比b多出來的行 grep -v '^h' test.txt //顯示非以h開發的 grep -E '^(h|y)' test.txt //-E支援擴充正則,相當於egrep grep -A 1 'hello' test.txt //除了顯示匹配到的行也顯示它之後的一行grep -B 1 'hello' test.txt //除了顯示匹配到的行也顯示它之前的一行grep -C 1 'hello' test.txt //除了顯示匹配到的行也顯示它之前和之後的一行 grep -r "hello" xx //在xx目錄尋找grep -c //統計匹配的行數grep -n //顯示行號grep -v '^hello' test.txt //顯示不以hello開頭的行--很聰明的寫法,第一位不以h開發,第二位不以e開發。。。 grep '^[^h]\|^.[^e]\|^..[^l]\|^...[^l]\|^....[^o]' [options]主要參數:-c:只輸出匹配行的計數。-I:不區分大 小寫(只適用於單字元)。-h:查詢多檔案時不顯示檔案名稱。-l:查詢多檔案時只輸出包含匹配字元的檔案名稱。-n:顯示匹配行及 行號。-s:不顯示不存在或無匹配文本的錯誤資訊。-v:顯示不包含匹配文本的所有行。命令Regex: . 匹配單個字元 如..X yiX能查出來 ^ 匹配行首 ^d 每行第一個字元為d $ 匹配行尾 T$ 每行最後一個字元為T * 匹配任一字元串 \ 屏蔽特殊字元的含義 A\{2\}B 字母A出現兩次 A\{2,\}B 至少出現兩次 A\{2,4\}B 出現2到4次[0-9]\{4\}xx[0-9]\{4\} 前四個是數字,中間是xx,後四個是數字patternRegex主要參數:\: 忽略Regex中特殊字元的原有含義。^:匹配Regex的開始行。$: 匹配Regex的結束行。\<:從匹配正則表達 式的行開始。錨定單詞的開始,如:/\<love/匹配包含以love開頭的單詞的行。\>:到匹配Regex的行結束。[ ]:單個字元,如[A]即A符合要求 。[ - ]:範圍,如[A-Z],即A、B、C一直到Z都符合要求 。。:所有的單個字元。* :有字元,長度可以為0 [^] 匹配一個不在指定範圍內的字元,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行。 + 匹配前面的子運算式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 {1,}。 ? 匹配前面的子運算式零次或一次。例如,"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等價於 {0,1}。(?=pattern) 正向預查,在任何匹配 pattern 的字串開始處匹配尋找字串。這是一個非擷取匹配,也就是說,該匹配不需要擷取供以後使用。例如, 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。預查不消耗字元,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是從包含預查的字元之後開始。 (?!pattern) 負向預查,在任何不匹配Negative lookahead matches the search string at any point where a string not matching pattern 的字串開始處匹配尋找字串。這是一個非擷取匹配,也就是說,該匹配不需要擷取供以後使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。預查不消耗字元,也就是說,在一個匹配發生後,在最後一次匹配之後立即開始下一次匹配的搜尋,而不是從包含預查的字元之後開始 (?:pattern) 匹配 pattern 但不擷取匹配結果,也就是說這是一個非擷取匹配,不進行儲存供以後使用。這在使用 "或" 字元 (|) 來組合一個模式的各個部分是很有用。例如, 'industr(?:y|ies) 就是一個比 'industry|industries' 更簡略的運算式 pcregrep 'Windows (?=2000|95|98|NT)' test.txt //Windows後面是2000或95..pcregrep 'Windows (?!2000|95|98|NT)' test.txt //Windows後面非2000,95,98等pcregrep 'Windows (?:95|98|NT|2000)' test.txt //與第一種一樣egrep:為 grep 的擴充版本, 改良了許多傳統 grep 不能或不便的操作. 比方說:- grep 之下不支援 ? 與 + 這兩種 modifier, 但 egrep 則可.- grep 不支援 a|b 或 (abc|xyz) 這類"或一"比對, 但 egrep 則可.fgrep:不作 RE 處理, 運算式僅作一般字串處理, 所有 meta 均失去功能.pcregrep:pcregrep - a grep with Perl-compatible regular expressions , perl正則,是最流行和規範的
grep的用法
grep是linux下用於搜尋輸出內容中所含內容的一個命令。
1.例如我要搜尋名為aaa.txt中的一串字元"bbb",可以用
cat aaa.txt|grep bbb
2.我要搜尋目前的目錄含有bb的檔案,可以用
ls |grep bb
Linux下Grep命令的詳細使用方法
在linux中grep命令是非常有用的,它和管道(|)配合使用,非常強大,用於搜尋文字檔.如果想要在幾個文字檔中尋找一字串,可以使用‘grep’命令。‘grep’在文本中搜尋指定的字串。
假設您正在‘/usr/src/linux/Documentation’目錄下搜尋帶字串‘magic’的檔案:
$ grep magic /usr/src/linux/Documentation/*
sysrq.txt:* How do I enable the magic SysRQ key?
sysrq.txt:* How do I use the magic SysRQ key?
其中檔案‘sysrp.txt’包含該字串,討論的是 SysRQ 的功能。
預設情況下,‘grep’只搜尋目前的目錄。如果此目錄下有許多子目錄,‘grep’會以如下形式列出:
grep: sound: Is a directory
這可能會使‘grep’的輸出難於閱讀。這裡有兩種解決的辦法:
明確要求搜尋子目錄:grep -r
或忽略子目錄:grep -d skip
當然,如果預料到有許多輸出,您可以通過 管道 將其轉到‘less’上閱讀:
$ grep magic /usr/src/linux/Documentation/* | less
這樣,您就可以更方便地閱讀。
有一點要注意,您必需提供一個檔案過濾方式(搜尋全部檔案的話用 *)。如果您忘了,‘grep’會一直等著,直到該程式被中斷。如果您遇到了這樣的情況,按 <CTRL c> ,然後再試。
下面是一些有意思的命令列參數:
grep -i pattern files :不區分大小寫地搜尋。預設情況區分大小寫,
grep -l pattern files :只列出匹配的檔案名稱,
grep -L pattern files :列出不匹配的檔案名稱,
grep -w pattern files :只匹配整個單詞,而不是字串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files :匹配的上下文分別顯示[number]行,
grep pattern1 | pattern2 files :顯示匹配 pattern1 或 pattern2 的行,
grep pattern1 files | grep pattern2 :顯示既匹配 pattern1 又匹配 pattern2 的行。
這裡還有些用於搜尋的特殊符號:
\< 和 \> 分別標註單詞的開始與結尾。
例如:
grep man * 會匹配 ‘Batman’、‘manic’、‘man’等,
grep '\<man' * 匹配‘manic’和‘man’,但不是‘Batman’,
grep '\<man\>' 只匹配‘man’,而不是‘Batman’或‘manic’等其他的字串。
'^':指匹配的字串在行首,
'$':指匹配的字串在行尾,
如果您不習慣命令列參數,可以試試圖形介面的‘grep’,如 reXgrep 。這個軟體提供 AND、OR、NOT 等文法,還有漂亮的按鈕 ......餘下全文>>