1. 程式人生 > 其它 >13Linux三劍客之grep命令

13Linux三劍客之grep命令

目錄

Linux三劍客之grep命令

Linux grep 命令用於查詢檔案裡符合條件的字串

grep 指令用於查詢內容包含指定的範本樣式的檔案,如果發現某檔案的內容符合所指定的範本樣式,預設 grep 指令會把含有範本樣式的那一列顯示出來。若不指定任何檔名稱,或是所給予的檔名為 -,則 grep 指令會從標準輸入裝置讀取資料

grep命令一般用來篩選資料,一般用來篩選我們需要的資料

語法

grep [引數] [過濾規則] [路徑]


標準輸出

 | grep [引數][過濾規則]
 


引數

-n : 顯示過濾出來的檔案在檔案當中的行號
-o : 只顯示匹配到的內容
-q : 靜默輸出(一般用來shell腳本當中)
-i : 忽略大小寫
-c : 顯示匹配到的行數
-v :反向查詢
-w : 匹配某個詞
-E :使用擴充套件正則
-R :遞迴查詢
-l : 只打印檔案路徑


擴充套件引數:
-A :顯示匹配到的資料的後幾n行
-B :顯示匹配到的資料的前幾n行
-C :顯示匹配到的資料的前後各幾n行

知識儲備:
$?	: 代表上一條命令執行是否成功(0:成功,非0代表失敗)
詞  :一連串字母和數字組成的字串
wc -l : 列印顯示有多行

案例1: 要求過濾出/etc/passwd中包含的root的行及其行號

[root@localhost hhh]#grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

案例2:要求過濾出/etc/passwd中包含的root的行,只顯示過濾到的內容

[root@localhost hhh]#grep -o 'root' /etc/passwd
root
root
root
root

案例3: 計算/etc目錄下包含root的檔案有多少個?

[root@localhost hhh]#grep -lR 'root' /etc | wc -l 
140

案例4:查詢/etc/passwd檔案中包含/bin/bash的行並輸出行號

[root@localhost hhh]#grep  -n 'bin/bash' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
21:text:x:1000:1000::/home/text:/bin/bash
22:test1:x:1001:1001::/home/test1:/bin/bash
23:test:x:1002:1002::/home/test:/bin/bash

正則表示式

正則表示式(Regular Expression)是一種文字模式,包括普通字元(例如,a 到 z 之間的字母)和特殊字元(稱為"元字元")。

正則表示式使用單個字串來描述、匹配一系列匹配某個句法規則的字串。

普通正則表示式

*			:匹配零個或多個前導字元
$ 			:以前導字元結尾
.			:匹配任意一個字元(換行符除外)
^			:以 後導字元開頭的行
[^]			:取反
.*			:所有的字元的任何個數
[]			: 或者(其中包含的所有的字元的或者)
[a-z]		:a-z所有的一個字母
[A-Z]		:A-Z所有的一個字母
[0-9]		:0-9所有的一個數字

擴充套件正則表示式(grep 必須加-E引數,或者使用egrep命令)

egrep  等價於  grep -E 


+			: 前導字元的一個或多個
?			: 前導字元的零個或一個
|			:  或者(豎線兩邊的字元的或者)
()			: 分組,組成一個整體	
\n      	:  n代表的是前面第幾個分組
{m,n}		:  範圍,至少有m個,最多有n個
{m}			:  範圍,固定m個
{m,}		: 範圍,至少有m個

案例1:匹配包含aa的行

grep 'aa' demo.txt egrep 'a{2}' demo.txtegrep 'aaa?' demo.txtegrep 'aa+' demo.txt 

案例1:要求打印出/etc/nginx/nginx.conf中的不是以#開頭的行

 grep "^[^#]" /etc/nginx/nginx.conf

案例2:要求匹配出本機中所有的普通使用者

普通使用者:  uid >=1000的
egrep ":[0-9]{4}" /etc/passwd

案例3:查詢出包含 22 或者 33 的行

egrep "22|33" demo.txt

案例4;要求匹配出包含1234abcd1234abcd的行

grep -E "(1234)(abcd)\1\2" 1.txt 

練習5:過濾出當前系統IP

ip a | egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"


[root@localhost hhh]#ip a | egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" 
127.0.0.1
192.168.15.200
192.168.15.255
172.16.1.200
172.16.15.255