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...