Linux下Shell文本處理三劍客--grep

1、grep

過濾來自一個文件或標準輸入匹配模式內容。

除了grep外,還有egrep、fgrep。egrep是grep的擴展,相當於grep -E。fgrep相當於grep -f,用的少。

Usage: grep [OPTION]… PATTERN [FILE]…

支持的正則 描述
-E,–extended-regexp 模式是擴展正則表達式(ERE)
-P,–perl-regexp 模式是Perl正則表達式
-e,–regexp=PATTERN 使用模式匹配,可指定多個模式匹配
-f,–file=FILE 從文件每一行獲取匹配模式
-i,–ignore-case 忽略大小寫
-w,–word-regexp 模式匹配整個單詞
-x,–line-regexp 模式匹配整行
-v,–invert-match 打印不匹配的行
輸出控制 描述
-m,–max-count=NUM 輸出匹配的結果num數
-n,–line-number 打印行號
-H,–with-filename 打印每個匹配的文件名
-h,–no-filename 不輸出文件名
-o,–only-matching 只打印匹配的內容
-q,–quiet 不輸出正常信息
-s, --no-messages 不輸出錯誤信息
-r,–recursive 遞歸目錄
-c,–count 只打印每個文件匹配的行數
–include=FILE_PATTERN–exclude=FILE_PATTERN–exclude-from=FILE–exclude-dir=PATTERN 只檢索匹配的文件跳過匹配的文件跳過匹配的文件,來自文件模式跳過匹配的目錄
內容行控制 描述
-B,–before-context=NUM 打印匹配的前幾行
-A,–after-context=NUM 打印匹配的後幾行
-C,–context=NUM 打印匹配的前後幾行
–color[=WHEN], 匹配的字體顏色
示例:

1)輸出b文件中在a文件相同的行
[root@ chenc01 ~]# grep -f a b

2)輸出b文件中在a文件不同的行
[root@ chenc01 ~]# grep -v -f a b

3) 匹配多個模式
[root@ chenc01 ~]# echo "a bc de" |xargs -n1 |grep -e 'a' -e 'bc'
a
bc

4)去除空格http.conf文件空行或開頭#號的行
[root@ chenc01 ~]# grep -E -v "^$|^#" /etc/httpd/conf/httpd.conf

5) 匹配開頭不分大小寫的單詞
[root@ chenc01 ~]# echo "A a b c" |xargs -n1 |grep -i a[root@ chenc01 ~]# echo "A a b c" |xargs -n1 |grep '[Aa]'
A
a

6)只顯示匹配的字符串
[root@ chenc01 ~]# echo "this is a test" |grep -o 'is'
is
is

7)輸出匹配的前五個結果
[root@ chenc01 ~]# seq 1 20 |grep -m 5 -E '[0-9]{2}'
10
11
12
13
14

8)統計匹配多少行
[root@ chenc01 ~]# seq 1 20 |grep -c -E '[0-9]{2}'
11

9) 匹配b字符開頭的行
[root@ chenc01 ~]# echo "a bc de" |xargs -n1 |grep '^b'
bc

10) 匹配de字符結尾的行並輸出匹配的行
[root@ chenc01 ~]# echo "a ab abc abcd abcde" |xargs -n1 |grep -n 'de$'
5:abcde

11) 遞歸搜索/etc目錄下包含ip的conf後綴文件
[root@ chenc01 ~]# grep -r '192.167.1.1' /etc --include *.conf

12) 排除搜索bak後綴的文件
[root@ chenc01 ~]# grep -r '192.167.1.1' /opt --exclude *.bak

13) 排除來自file中的文件
[root@ chenc01 ~]# grep -r '192.167.1.1' /opt --exclude-from file

14) 匹配41或42的數字
[root@ chenc01 ~]# seq 41 45 |grep -E '4[12]'
41
42

15) 匹配至少2個字符
[root@ chenc01 ~]# seq 13 |grep -E '[0-9]{2}'
10
11
12
13

16) 匹配至少2個字符的單詞,最多3個字符的單詞
[root@ chenc01 ~]# echo "a ab abc abcd abcde" |xargs -n1 |grep -E -w -o '[a-z]{2,3}'
ab
abc

17) 匹配所有IP
[root@ chenc01 ~]# ifconfig |grep -E -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"

18) 打印匹配結果及後3行
[root@ chenc01 ~]# seq 1 10 |grep 5 -A 3
5
6
7
8

19) 打印匹配結果及前3行
[root@ chenc01 ~]# seq 1 10 |grep 5 -B 3
2
3
4
5

20) 打印匹配結果及前後3行
[root@ chenc01 ~]# seq 1 10 |grep 5 -C 3
2
3
4
5
6
7
8

21) 不顯示輸出
不顯示錯誤輸出:
[root@ chenc01 ~]# grep 'a' abc

grep: abc: No such file or directory

[root@ chenc01 ~]# grep -s 'a' abc
[root@ chenc01 ~]# echo $?
2

不顯示正常輸出:
[root@ chenc01 ~]# grep -q 'a' a.txt

grep支持上一章的基礎和擴展正則表達式字符。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章