Linux基本指令(9) grep

2021-08-20 02:26:32 字數 4099 閱讀 8953

linux搜尋過濾——grep

grep在服務端查詢訊息時經常會被使用到,這裡總結幾個常用,簡單的命令,熟練掌

握可以使查詢更為高效。配合正規表示式使用,功能將更加強大。

格式 grep [option] pattern filename

1    grep --version    顯示grep的版本號

2    -a數字n   找到所有的匹配行,並顯示匹配行後面n行

grep -a 2 "a" test.txt    //匹配字元「a」後面兩行

3    -b 數字n    找到所有的匹配行,並顯示匹配行前面n行

grep -b 2 "a" test.txt    //匹配字元』a』 前面兩行

4      -b    顯示匹配到的字元在檔案中的偏移位址 ,即有多少位元組

5     -c    顯示有多少行被匹配到

grep -c "a" test.txt 

6      -e    可以使用多個正規表示式

grep -e "a" -e "1" test.txt    //查詢txt中字元 『a』  和 字元 『1』

7      -f filea fileb    

filea在fileab中的匹配

grep -f test.txt test1.txt

grep -f test1.txt test.txt

8      

-i   

不區分大小寫

grep -i "a" test1.txt

//出所有字元』a』 並且不區分大小寫

9        -m

數字n    

最多匹配n個後停止

grep -m 2 "a" test.txt

//匹配2個後停止

10    -n    列印行號

grep -n -m 2 "a" test.txt    //列印出匹配字元的行號

11    -o    會列印匹配到的字元

12   -r    搜尋子目錄

grep "a" *    //只在當前目錄查詢字元』a』

grep -r "a" *

//在當前目錄和子目錄查詢字元』a』

13    -v    顯示不包括查詢字元的所有行

grep -v "a" test.txt

15        -x

輸出完全匹配內容

1       ^    匹配行首

grep -n '^a' test.txt    //匹配以字元』a』開頭的

2        $    匹配行尾

grep -n '33$' test.txt

//匹配以字串」33」結束的

3       [ ]    匹配[ ]內的字元(單字元)     

可以使用單字元    可以用^

符號做內的字首,表示除內的字元之外的字元。

如 [ 1] 即匹配含有字元』1』的字串(示例1),

如 [ a] 即匹配含有字元』a』的字串(示例2),    grep -n --color '[a]' test.txt

如 [ 1 2 3 ] 即匹配含有字元』1』 或者 』2』 或者』3』 的字串(示例3),    grep -n --color  '[1 2 3]' test.txt

也可以使用字串行,用字元 『-』 代表字串行    grep -n --color '[1-3]' test.txt

如 [ 1-3 ] 即匹配含有字元』1』 或者 』2』 或者』3』 的字串(示例4) 

如 [ 1-3  a-b] 即匹配含有字元』1』 或者 』2』 或者』3』 或者 』a』 或者 』b』的字串(示例5)

grep -n --color '[1-3 a-b]' test.txt 

注意,相讓

中的^ - 不表現特殊意義,可以放在裡面內容的後面。

'[^a-z\.!^ -]'

表示沒有小寫字母,沒有. 沒有!, 沒有空格,沒有- 的 串,注意裡面有個小

空格。另外shell

裡面的反向選擇為[!range], 正則裡面是 [^range]

4        .    匹配任意的單字元

grep -n --color  '^.3' test.txt    //任意字元開頭然後第二個字元為 『3』

grep -n --color  '^..3' test.txt

//任意兩個字元開頭,然後第三個字元為 『3』

5        *    緊跟乙個單字元,表示匹配0個或者多個此字元

grep -n --color  '3*' test.txt    //匹配字元』3』 0次或者多次

.*表示 0個或多個任意字元

6        grep -n --color '23*' test.txt    //匹配字串」23」,但是 『3』 被匹配的次數 >= 0

7        \

用來遮蔽元字元的特殊含義

echo "365.398" | grep --color '.'    //查詢任意單字元

echo "365.398" | grep --color '\.'    //查詢「.」這個字元

8       

\? 匹配前面的字元0 次或者1次

grep -n --color '33\?' test.txt

//匹配字串」33」但是 第二個字元『3』只能匹配0次或

者1次,因此實際匹配到的字元有「33 」和 『3』這兩種

grep -n --color '23\?' test.txt

//匹配字串」23」但是 第二個字元『3』只能匹配0次或

者1次,因此實際匹配到的字元有「23 」和 『2』這兩種

9        \+    匹配前面的字元1次或者多次

grep -n --color '3\+' test.txt

10    x\    匹配字元x m次    注意,由於

在shell中有特殊意義,因此作為正則表

達式用的時候要用\轉義一下。

grep -n --color '3\' test.txt

11     x\    匹配字元x最少m次

grep -n --color '3\' test.txt

12     x\    匹配字元x m---n 次

grep -n --color '3\' test.txt

13    \|    表示或的關係

grep -n "\(ab\|23\)" test.txt

grep與正規表示式

首先要記住的是: 正規表示式與萬用字元不一樣,它們表示的含義並不相同!

正規表示式只是一種表示法,

只要工具支援這種表示法,那麼該工具就可以處理正規表示式的字串。vi grep ,awk ,sed 等都支援正規表示式.

1基礎正規表示式

grep

工具,以前介紹過。

grep -[acinv] '

搜尋內容串' filename

-a 以文字檔案方式搜尋

-c 計算找到的符合行的次數

-i 忽略大小寫

-n 順便輸出行號

-v 反向選擇,即找 沒有搜尋字串的行

其中搜尋串可以是正規表示式!

2擴充套件正規表示式是對基礎正規表示式新增了幾個特殊構成的。

它令某些操作更加方便。

比如我們要去除 空白行和行首為 #的行, 會這樣用:

woody@xiaoc:~/tmp$ grep -v '^$' regular_express.txt | grep -v '^#'

然而使用支援擴充套件正規表示式的 egrep 與擴充套件特殊符號 | ,會方便許多。

注意grep只支援基礎表示式, 而egrep 支援擴充套件的,其實 egrep 是 grep -e 的別名而

已。因此grep -e 支援擴充套件正則。那麼:

woody@xiaoc:~/tmp$ egrep -v

'^$|^#'

regular_express.txt

Linux基本命令練習 9 grep

find命令是根據檔案的屬性進行查詢,如檔名,檔案大小,所有者,所屬組等。grep命令是根據檔案的內容進行查詢,會對檔案的每一行按照給定的模式 pattern 進行匹配查詢。options root muban data cat iantest1.txt 1ian aaa 2ian aaa 3ian...

Linux基礎指令 9

讓遠端主機可以通過網路訪問sshd服務,開始乙個安全 shell ssh 遠端主機使用者 遠端主機ip root desktop0 ssh root the authenticity of host 172.25.0.11 172.25.0.11 can t be established.ecdsa...

linux中grep基本用法

grep 查詢並且提取檔案內容 常用的匹配模式 hello 包含字元hello hello 以字串hello開頭 hello 以字串hello結尾 語法格式 grep 條件 檔名稱 例 1.在 hello a.txt檔案中找出包含 hello 的行 grep hello hello a.txt he...