13Linux三劍客之grep命令
阿新 • • 發佈:2021-10-09
目錄
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