Linux基礎 grep匹配命令

2021-07-29 02:19:34 字數 4098 閱讀 7736

正則就是有一定規律的字串,不僅可以使用命令列工具grep, sed,awk ,egrep去引用正則,還可以把正則嵌入到 nginx,apache,甚至php,python中。特殊符號(. * + ? |)

grep,主要用來過濾出指定的行。指定的條件,用正規表示式。

1、語法選項

grep [-civnabc] 'word' filename

-n 在輸出符合要求的行的同時,連同行號一起輸出

-c 列印符合要求的行數

-v 列印不符合要求的行

--color 匹配到的關鍵字用紅色標識

-a 後跟乙個數字,空格可有可無,-a2 表示列印符合要求的行以及下面兩行

-b 後跟乙個數字,-b2 表示列印符合要求的行以及上面兩行

-c 後跟乙個數字,-c2 表示列印符合要求的行以及上下各兩行

-r 把目錄下面所有的檔案全部遍歷 【不是很常用】

-i 不區分大小寫

-e 脫意字元\的作用

#grep -r "iptables" /etc/* 顯示該目錄下所有包含該字元的資訊,包含檔案路徑

#grep -rh "iptables" /etc/* 不顯示檔案路徑,直接顯示結果

2、例子介紹

#alias grep='grep --color'

#cp /etc/passwd 1.txt

#grep '[cnsoe]' 1.txt 取其中任意乙個進行匹配,匹配cnsoe中的任何乙個

#grep '[0-9]' 1.txt 匹配包含任意數字

#grep '[^0-9]' 1.txt 匹配包含非數字的行,某行有數字,字母,特殊字元,也會顯示出來。

#grep '^[0-9]' 1.txt 取數字開頭的行

#grep -v '[0-9]' 1.txt 匹配不包含數字的行,

可匹配空行,特殊字元

#grep -v '^[0-9]' 1.txt 匹配非0-9開頭的行,

可匹配空行,特殊字元

#grep '^[^0-9]' 1.txt 取不以數字開頭的行,可匹配特殊符號,

不包括空行

#grep '^$' 1.txt

取空行,不包含任何字元的行,空格也算特殊字元

#grep '[^a-za-z]' 匹配包含非字母的行,並非全部都沒有字母,只要含有非字母都可以

#grep '^[1-9][0-9]*$' 1.txt:匹配開頭為1到9其中乙個數字,結尾是0個或多個數字 ?????

'r.o' .表示任意乙個字元,包括特殊符號。

'r\?o' ?表示零個或乙個?前面的字元;匹配出的結果又 roo ,

r\?o中表示匹配前面字元0次或1次,即匹配ro或o,所以,roo應該分開看,前兩個字元ro是匹配字元『r』一次,o是匹配字元『r』0次,同理oo也是分開看,都是匹配字元『r』0次。

'r+o' +表示大於等於1個+號前面的字元

'r*o' *表示零個或多個*號前面的字元,

'r.*o' .* 任意乙個字元+任意乙個星號*前面的字元==任意零個或多個任意字元,r開頭o結尾的字元,中間不重要,可以使特殊符號,

貪婪匹配

'r*.o' 匹配出o前面有零個或者多個任意字元的行

-e 'r?o' -e 和 脫意符號\的作用一樣,grep -e == egrep

過濾出帶有某個關鍵字的行並輸出行號

#grep -n 'root' 1.txt

#grep -n -v 'root' 1.txt

過濾出所有包含數字的行

#grep '[0-9]' 1.txt 任意乙個數字都可以匹配,多個也可以

過濾所有不包含數字的行

#grep -v '[0-9]' 1.txt

去除所有以"#"開頭的行

#grep -v '^#' 1.txt

去除所有空行和以 # 開頭的行

#grep -v '^$' 1.txt |grep -v '^#'

過濾英文本母開頭的行

#grep '^[a-za-z]' 1.txt

過濾以非數字開頭的行

#grep '^[^0-9]' 1.txt 匹配結果會首字母會顏色標出,匹配特殊符號

#grep -nv '^[0-9]' 1.txt 匹配結果差別在下面這個沒有顏色,匹配特殊符號以及空行

過濾任意乙個或多個字元 包含r.o,s*.d,p.*x的字元

#grep 'r.o' 1.txt ; grep 'r*t' 1.txt ; grep 'r.*t' 1.txt

. 表示任意乙個字元

* 表示 零個 或 多個 前面的字元

.* 表示零個或多個任意字元,空行也包含在內

過濾出包含 root 的行以及下面一行

#grep -a 1 'root' 1.txt

過濾出包含root的行以及上面一行

#grep -b 1 『root' 1.txt

指定過濾字元次數 匹配乙個oo的行

#grep 'o\' 1.txt

過濾包含2個字母o的行

3、egrep

grep工具的擴充套件,可以實現所有的grep功能,

可以用grep -e代替egrep。為方便可全部使用egrep來代替grep。

#alias egrep='egrep --color'

#grep 'r\?o' 1.txt == egrep 'r\?o' 1.txt== grep -e 'r?o' 1.txt

匹配 1 個或 1 個以上 + 前面的字元 匹配o+

#egrep 'o+' 1.txt

匹配 0 個或 1 個 ? 前面字元 匹配o?

#egrep 'o?' 1.txt

匹配 roo

或者

匹配 body

#egrep 'roo|body' 1.txt

匹配包含roo

並且

包含 log 的行

#egrep 'roo' 1.txt |egrep 'roo|log'

#egrep 'log' 1.txt |egrep 'roo|log'

用括號表示乙個整體,例子會匹配 roo 或者 ato

#egrep 'r(oo)|(at)o' 1.txt

匹配 1 個或者多個 'oo'

#egrep '(oo)+' 1.txt

匹配 1 到 3 次 'oo'

#egrep '(oo)' 1.txt

匹配結果出現9個o,進行了多次匹配,也可以理解為包含但不限於1-3次。

1.txt檔案中某一行能匹配oo 1次、2次、3次都符合條件。對於 oooooooooo,前面6個o 符合:匹配oo3次;後面4個o符合匹配oo2次

#egrep '(oo)' 1.txt 匹配6個

#egrep '(oo)' 1.txt 匹配6個以上

4、. * + ? 總結 統配字元

. 任意字元,包括特殊字元,下劃線,空格,

* 零個 或者 多個 *前面的字元

.* 任意數量任意字元,包括空行

*. 'r*.o' 匹配出o前面有零個或者多個任意字元的行

+ 表示 1 個或 多個 + 前面的字元

僅限egrep

? 表示 0 個或 1 個?前面的字元

僅限egrep

grep 表示式裡面出現 ? + ( ) | 這幾個特殊符號,需要前面加脫意符號,或者使用 grep -e ,或者使用egrep,故方便起見,全部使用egrep。

擴充套件 --include 指定檔案

grep 其實還可以這樣使用:

在tmp目錄下,過濾所有 *.txt 文件中含有root的行

grep -r --include="*.txt" 'root' /

data目錄下,所有 *.php 文件中包含eval的行

egrep -rhn --include="*.php" 'eval' 1.txt

linux基礎命令grep

目的 使用grep命令來查詢檔案中符合條件的字串 格式 grep 選項 查詢模式 檔名 舉例項看看 建立乙個檔案test1.txt,檔案的內容是 aaaaaaaaa abcabcabcabc cbacbacba match pattern nand erase 首先在查詢字串時,我們希望顯示如下內容...

Linux基礎命令之grep

grep 根據pattern 模式 搜尋文字,並將符合模式的文字行顯示出來,並不會修改原檔案。用法 grep options pattern file 也可以利用管道進行匹配 i ignore 忽略大小寫 colour 將匹配的字串加顏色。v 反向查詢,顯示與pattern不匹配的行 o 只顯示被模...

linux基礎命令之選取命令grep

命令作用 分析一行資訊,若當中有我們所需要的資訊,就將該行拿出來。命令語法 grep acinv color auto 查詢字串 filename 引數 a 將binary檔案以text檔案的方式查詢資料 c 計算找到 查詢字串 的次數 i 忽略大小寫的不同,n 順便輸出行號 v 反向選擇,即顯示出...