歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Linux shell grep指令

Linux shell grep指令

日期:2017/3/1 16:35:18   编辑:SHELL編程
Linux shell grep指令 grep一般格式為: www.2cto.com grep [選項]基本正則表達式[文件] 這裡基本正則表達式可為字符串。 單引號雙引號 在g r e p命令中輸入字符串參數時,最好將其用雙引號括起來。 在調用模式匹配時,應使用單引號。 例如:“m y s t r i n g”。這樣做有兩個原因,一是以防被誤解為s h e l l命令,二是可以用來查找多個單詞組成的字符串。 在調用變量時,也應該使用雙引號,諸如: g r e p“$ M Y VA R”文件名,如果不這樣,將沒有返回結果。 常用的g r e p選項有: www.2cto.com -c 只輸出匹配行的計數。 -i 不區分大小寫(只適用於單字符)。 -h 查詢多文件時不顯示文件名。 -l 查詢多文件時只輸出包含匹配字符的文件名。 -n 顯示匹配行及行號。 -s 不顯示不存在或無匹配文本的錯誤信息。 -v 顯示不包含匹配文本的所有行。 舉例: 1、查詢多個文件 在所有文件中查詢單詞“ sort it” $ grep "sort it" * 2、 行匹配 1)顯示包含“4 8”字符串的文本: $ grep "48" data.f 2)輸出匹配行的總數 $ grep -c "48" data.f 4 3)行數 顯示滿足匹配模式的所有行行數: $ grep -n "48" data.f 行數在輸出第一列,後跟包含4 8的每一匹配行。 4)顯示非匹配行 $ grep -v "48" data.f 5)精確匹配 可能大家已注意到,在上一例中,抽取字符串“ 4 8”,返回結果包含諸如4 8 4和4 8 3等包含“4 8”的其他字符串,實際上應精確抽取只包含4 8的各行。 使用g r e p抽取精確匹配的一種更有效方式是在抽取字符串後加\ >。假定現在精確抽取4 8,方法如下: $grep "48\>" data.f 6)大小寫敏感 缺省情況下, g r e p是大小寫敏感的,如要查詢大小寫不敏感字符串,必須使用- i開關。在d a t a . f文件中有月份字符S e p t,既有大寫也有小寫,要取得此字符串大小寫不敏感查詢,方法如下: $grep -i "48" data.f 1、模式范圍 抽取代碼為4 8 4和4 8 3的城市位置,可以使用[ ]來指定字符串范圍。 $ grep "48[34]" data.f 2、不匹配行首 使行首不是4或8,可以在方括號中使用^記號。 $ grep "^[^48]" data.f 如果是字符串48 $ grep -v "^[^48]" data.f 3、設置大小寫 使用- i開關可以屏蔽月份S e p t的大小寫敏感 $ grep -i "sept" data.f 也可以用另一種方式[ ]模式抽取各行包含S e p t和s e p t的所有信息。 $ grep '[sS]ept' data.f 如果要抽取包含S e p t的所有月份,不管其大小寫,並且此行包含字符串483,可以使用管道命令,即符號“|”左邊命令的輸出作為“ |”右邊命令的輸入。舉例如下: [sam@chenwy sam]$ grep '[sS]ept' data.f | grep 48 483 Sept 5AP1996 USP 65.00 LVX2C 189 4、匹配任意字符 如果抽取以K開頭,以D結尾的所有代碼,可使用下述方法,因為已知代碼長度為5個字符: [sam@chenwy sam]$ grep 'K...D' data.f 47 Oct 3ZL1998 LPSX 43.00 KVM9D 512 483 may 5PA1998 USP 37.00 KVM9D 644 將上述代碼做輕微改變,頭兩個是大寫字母,中間兩個任意,並以C結尾: [sam@chenwy sam]$ grep '[A-Z]..C' data.f 5、日期查詢 一個常用的查詢模式是日期查詢。先查詢所有以5開始以1 9 9 6或1 9 9 8結尾的所有記錄。使用模式5 . . 1 9 9 [ 6 , 8 ]。這意味著第一個字符為5,後跟兩個點,接著是1 9 9,剩余兩個數字是6或8。 [sam@chenwy sam]$ grep '5..199[6,8]' data.f 6、范圍組合 必須學會使用[ ]抽取信息。假定要取得城市代碼,第一個字符為0-9,第二個字符在0到5之間,第三個字符在0到6之間,使用下列模式即可實現。 [sam@chenwy sam]$ grep '[0-9][0-5[0-6]' data.f 7、模式出現機率 抽取包含數字4至少重復出現兩次的所有行,方法如下 [sam@chenwy sam]$ grep '4\{2,\}' data.f 8、使用grep匹配“與”或者“或”模式 g r e p命令加- E參數,這一擴展允許使用擴展模式匹配。例如,要抽取城市代碼為2 1 9或2 1 6,方法如下: [sam@chenwy sam]$ grep -E '219|216' data.f 9、空行 結合使用^和$可查詢空行。使用- c參數顯示總行數: [sam@chenwy sam]$ grep -c '^$' myfile 使用- n參數顯示實際在哪一行: [sam@chenwy sam]$ grep -n '^$' myfile 10、匹配特殊字符 查詢有特殊含義的字符,諸如$ . ' " * [] ^ | \ + ? ,必須在特定字符前加\。假設要查詢包含“.”的所有行,腳本如下: [sam@chenwy sam]$ grep '\.' myfile 或者是一個雙引號: [sam@chenwy sam]$ grep '\"' myfile 以同樣的方式,如要查詢文件名c o n f t r o l l . c o n f(這是一個配置文件),腳本如下: [sam@chenwy sam]$ grep 'conftroll\.conf' myfile 11、查詢格式化文件名 使用正則表達式可匹配任意文件名。系統中對文本文件有其標准的命名格式。一般最多六個小寫字符,後跟句點,接著是兩個大寫字符。 [sam@chenwy sam]$ grep '^[a-z]\{1,6\}\.[A-Z]\{1,2\}' filename 2、使用通配符*的匹配模式 grep "l.*s" testfile 如在行尾查詢某一單詞,試如下模式: grep "ng$" testfile 這將在所有文件中查詢行尾包含單詞ng的所有行。
Copyright © Linux教程網 All Rights Reserved