Shell編程之---grep命令詳解

來源:互聯網
上載者:User

標籤:grep

grep 一種強大的文本搜尋工具,它能使用Regex搜尋文本,並把匹配的行列印出來


grep [option]  [mode]  [file]


-c       #只輸出匹配行的數量
-i       #搜尋時忽略大小寫
-h       #查詢多檔案時不顯示檔案名稱
-l       #只列出符合匹配的檔案名稱,而不列出具體的匹配行
-n   #列出所有的匹配行,並顯示行號
-s   #不顯示不存在或無匹配文本的錯誤資訊
-v   #顯示不包含匹配文本的所有行
-w   #匹配整詞
-x   #匹配整行
-r   #遞迴搜尋,不僅搜尋當前工作目錄,而且搜尋子目錄
-q   #禁止輸出任何結果,以退出狀態表示搜尋是否成功
-b   #列印匹配行距檔案頭部的位移量,以自己為單位
-o   #與-b選項結合使用,列印匹配的詞距頭部的位移量,以位元組為單位
-E   #支援擴充的Regex
-F   #不支援Regex,按照字串的字面意思進行匹配

grep -c root /etc/passwd   #文本中有兩個root匹配,即顯示行數為2
grep -i xxx  1   #文本中有XXX和xxx,-i之後會忽略大小寫都輸出出來
grep -h root /etc/passwd /etc/shadow  #原本查詢多檔案時,匹配會顯示出檔案名稱及匹配行,加-h之後只會顯示匹配的行,而不會顯示匹配與哪個檔案
grep -l root /etc/passwd /etc/shadow  #加-l之後只會顯示匹配的檔案名稱,而不列出具體的匹配行
grep -n root /etc/passwd          #-n在輸出匹配結果前面會加匹配的行號
grep -s root /etc/passwd          #不顯示錯誤資訊,例如: grep root /etc/passwdwdwd 
grep -v root /etc/passwd   #列出除了匹配行root以外的所有行
grep -w root /etc/passwd          #列出檔案中有單個root的單詞的行
grep -x root /etc/passwd   #列出檔案中有單個root為整行的行
grep -r root /tmp          #列出/tmp下面的root及子目錄檔案下的root,遞迴查詢出所有的root字元
grep -q root /tmp/root     #不輸出任何資訊,以退出方式,成功為0,不成功為其他值

grep -vc root /etc/passwd /etc/shadow       #顯示出檔案pass和sha中有多少行是不包含root的行


1、匹配行首
   (1)、檢索"/etc/passwd"中以"root"開頭的行,並列印出行號
        grep -n ^root /etc/passwd
   (2)、檢索"/etc/services"檔案中的空行,列出行號。再次檢索空行有幾行
        grep -n ^$ /etc/services 
        grep -c ^$ /etc/services
   (3)、搜尋檔案中以"-"開頭,並且重複任意次,然後是D字元的匹配行
        搜尋檔案中以"/"開頭,中間"4"個任一字元,第"6"個字元仍為"/"的匹配行
        grep ^-*D filename
        grep ^/..../ filename
   (4)、搜尋"sed.edu.cn"的匹配行
        grep sed\.edu\.cn
   (5)、搜尋"-"符號重複5次的文本行
        搜尋"the"精確匹配的行 
        grep ‘\-\{5\}‘ filename  #考驗‘‘和\{\}運算式的特性
        grep ‘\<the\>‘ filename  #考驗‘‘和\<\>運算式的特性

grep    #標準grep命令。支援Regex
egrep   #擴充grep命令。支援基本和擴充Regex
fgrep   #快速grep命令。不支援Regex,按照字串的字面意思進行匹配

egrep 命令與 grep -E等價
fgrep 命令與 grep -F等價


分析下面的Regex表達了什麼含義
(1)、kK*         grep kK* test             #列出檔案test包含kK及後面有任意多個字元的行
(2)、k\{6,8\}    grep  ‘k\{6,8\}‘ test    #列出檔案test中k單詞重複6-8個的行
(3)、k\{6,\}     grep  ‘k\{6,\}‘ test      #列出檔案test中k單詞大於6個的行
(4)、k\{10\}     grep  ‘k\{6\}‘ test      #列出檔案test中k單詞為6個的行
(5)、^NEW YEAR$          
(6)、^$           #空行
(7)、[0-9][0-9][a-z]  grep [0-9][0-9][a-z] file     #列出檔案中前兩個字元為數字,後一個字元為字母的匹配行
(8)、[A-H]\{1,3\},[0-9]\{5\} #grep ‘[a-h]\{1,3\}‘ test | grep ‘[0-9]\{5\}‘  #列出1-3個a-h單詞,5個數位字元
(9)、^\...
(10)、[^p-z]*\.         #列出除了p-z以外的多個任一字元的行

2、利用通配功能列出某目錄下所有以數字開頭,最後3為是句點和2個任意字母的檔案名稱
[0-9]*[a-z]\{2\}...

3、查看下面三條命令
   grep -c  ^$   filename    #列出空行的數目
   grep -c ^[^$] filename    #列出非空行的數目
   grep -c ^^$   filename    

4、統計目前的目錄及子目錄下的所有檔案所包含空白行的行數
   grep -r ^$ /root/ | wc -l

5、統計目前的目錄及子目錄下的所有檔案包含非空白行的行數
   grep -r ^[^$] /root/ | wc -l

6、結合對-符號的闡述,觀察是否對錯
   grep -n -\{5,\}  file   #缺引號,缺轉義符\-
   grep -n ‘-\{5,\}‘ file  #缺轉義符,系統預設不知道-是選項
   grep -n ‘\-\{5,\}‘ file #正確

Shell編程之---grep命令詳解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.