1.作用
Linux系統中grep指令是一種強大的文本搜尋工具,它能使用正規表示式搜尋文本,並把匹 配的行列印出來。 grep全名為Global Regular Expression Print,表示全域正規表示式版本,它的使用權限是所有使用者。
2.格式
grep [options]
3.主要參數
[options]主要參數:
-c:只輸出匹配行的計數。
-I:不區分大 小寫(只適用於單字元)。
-h:查詢多檔案時不顯示檔案名稱。
-l:查詢多檔案時只輸出包含符合字元的檔案名稱。
-n:顯示符合行及 行號。
-s:不顯示不存在或無符合文字的錯誤訊息。
-v:顯示不包含符合文字的所有行。
pattern正規表示式主要參數:
\: 忽略正規表示式中特殊字元的原始意義。
^:符合正規表示式的開始行。
$: 符合正規表示式的結束行。
\<:從符合正規表示 式的行開始。
\>:到符合正規表示式的行結束。
[ ]:單一字符,如[A]即A符合要求 。
[ - ]:範圍,如[A-Z],即A、B、C一直到Z都符合要求 。
。 :所有的單一字元。
* :有字符,長度可以為0。
4.grep指令使用簡單實例
$ grep ‘test’ d*
#顯示所有以d開頭的檔案包含 test的行。
$ grep ‘test’ aa bb cc
顯示在aa,bb,cc檔案中符合test的行。
$ grep ‘[a-z]\{5\}’ aa
顯示所有包含每個字串至少有5個連續小寫字元的字串的行。
$ grep 'w\(es\)t.*\1′ aa
如果west被匹配,則es就被儲存到記憶體中,並標記為1,然後搜尋任意個字元(.*),這些字元後面緊跟著另外一個es(\1),找到就顯示該行。如果用egrep或grep -E,就不用」\號進行轉義,直接寫成’w(es)t.*\1′就可以了。
5.grep指令使用複雜實例
假設您正在'/usr/src/Linux/Doc'目錄下搜尋帶字串'magic'的檔案:
# $ grep magic /usr/src/Linux/Doc/*
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’會一直等著,直到程式中斷。如果您遇到了這樣的情況,按
下面還有一些有趣的命令列參數:
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 -n pattern files 即可顯示行號資訊
grep -c pattern files 即可找出總行數
這裡仍有一些用於搜尋的特殊符號:
\< 和\> 分別標註單字的開始與結尾。
例如:
grep man * 會符合'Batman'、'manic'、'man'等,
grep '\ grep '\ '^':指符合的字串在行首, '$':指符合的字串在行尾, Grep 指令用法大全 1、 參數: -I :忽略大小寫 -c :列印符合的行數 -l :從多個檔案中找出包含符合項目 -v :尋找不包含符合項目的行 -n:列印包含符合項目的行和行標 2、RE(正規表示式) \ 忽略正規表示式中特殊字元的原始意義 ^ 符合正規表示式的開始行 $ 符合正規表示式的結束行 \< 從符合正規表示式的行開始 \> 到符合正規表示式的行結束 [ ] 單一字元;如[A] 即A符合要求 [ - ] 範圍;如[A-Z]即A ,B,C一直到Z都符合要求 . 所有的單個字符 * 所有字符,長度可以為0 3、舉例 # # ps -ef | grep in.telnetd root 19955 181 0 13:43:53 ? 0:00 in.telnetd # 更多. ##b124230 b034325 #a081016 m7187998 m7282064 a022021##1 #m9324822 b103303 #a013386 b044525 m8987131 # B103303 BADc2345 # more size.txt | grep '[a-b]' 範圍;如[A-Z]即A,B,C一直到Z都符合要求 b124230 b034325 a081016 a022021 #a061048 b103303 m7282064 a022021 a061048 m9324822 #b103303 a013386 m8987131 B081016 M45678 B103303 BADc2345 # more size.如[A] 即A符合要求 b124230 #b034325 b103303 b044525 # morerep size. [bB]' b124230 b034325 b103303 #b044525 B081016 #b0#B1032 ##BADc2345 # grep 'root' /etc/group root::0:root bin::2:root,bin,daemon #sys::3:root,bin,sys,adm adm::4:root,adm,daemon uucp::5:root,uucp
#a0 ##m9324822
a013386
#b044525
m8987131
B081016
more size.txt | grep -in 'b1..*3' 1:b124230 9:b103303 15:B103303 # grep '$' /etc/init.d/nfs.server | wc -l 128 # grep '\$' /etc/init.d/nfs.server | wc –l 忽略正規表示式中特殊字元的原始意義 15 ## grep '\$' /etc/init.d/nfs.server #case " $1" in >/tmp/sharetab.$$ #[ "x$fstype" != xnfs ] && echo "$path\t$res\ t$fstype\t$opts\t$desc" >>/tmp/sharetab.$$ /usr/bin/touch -r /etc/dfs/sharetab / tmp/sharetab.$$ /usr/bin/mv -f /tmp/sharetab.$$ /etc/dfs/sharetab if [ -f /etc/dfs/dfstab ] && /usr/bin/egrep -v '^[ ]*(#|$)' if [ $startnfsd -eq 0 -a -f /etc/rmmount.conf ] && #if [ $startnfsd -ne 0 ]; then elif [ ! -n "$_INIT_RUN_LEVEL" ]; then while [ $wtime -n "$_INIT_RUN_LEVEL" ]; then while [ $wtime -n 0 ]; dowhile [ $wtime -gt 0 ]; do
#wtime=`expr $wtime - 1`
if [ $wtime -eq 0 ]; then
echo "Usage: $0 { start | stop }"
# more size.txt
the test file
their are files
The end
grep 'the' size.txt
the test file
their are files
# grep '\ the test file their are files ## grep 'the\>' size.txt the test file # grep '\ 使用正規表示式的一個多用途文字搜尋工具.這個php?name=%C3%FC%C1%EE" onclick="tagshow(event)" class="t_tag">指令本來是ed行編輯器中的一個php?name=%C3%FC%C1%EE" onclick="tagshow(event)" class="t_tag">指令/過濾器: g/re/p -- global - regular expression - print. 基本格式 grep pattern [file...] (1)grep 搜尋字串[filename] (2)grep 正規表示式[filename] 在檔案中搜尋所有pattern 出現的位置, pattern 既可以是要搜尋的字串,也可以是一個正規表示式. #注意:在輸入要搜尋的字串時最好使用雙引號/而在模式匹配使用正規表示式時,請注意使用單引號 2,grep的選項 -c只輸出匹配行的計數 -i 不區分大小寫(用於單字元) -n 顯示匹配的行號 -v 不顯示不包含匹配文字的所以有行 -s 不顯示錯誤訊息 -E 使用擴充正規表示式 更多的選項請看:man grep #3,常用grep實例 (1)多個檔案查詢 grep "sort" *.doc #見檔案名稱的符合 #(2)行符合:輸出符合行的計數 grep -c "48" data.doc #輸出文件中含有48字元的行數 (3)顯示符合行和行數 grep -n "48" data.doc #顯示所有符合48的行和行號 (4)顯示非符合的行 grep -vn "48" data.doc ##[[ :lower:]] [a-z] [[:digit:]] [0-9] [[:alnum:]] [0-9a-zA-Z] [[:space:]] 空格或tab [[:alpha:]] [a-zA-Z] #(1)使用 # grep '5[[:upper:]][[:upper:]]' data.doc #查詢以5開頭以兩個大寫字母結尾的行 以上是Linux指令grep使用介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!