shell 文本處理之 grep

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

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

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

支持的正則

描述

-E,--extended-regexp    模式是擴展正則表達式(ERE)
-F,--fixed-strings    模式是換行分隔固定字符串
-G,--basic-regexp    模式是基本正則表達式(BRE)
-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

--include=FILE_PATTERN

--exclude=FILE_PATTERN

--exclude-from=FILE

--exclude-dir=PATTERN

遞歸目錄。

只搜索匹配的文件。

跳過匹配的文件。

跳過匹配的文件,來自文件模式。

跳過匹配的目錄

-c,--count    只打印每一個文件匹配的行數


內容行控制

描述

-B,--before-context=NUM    打印匹配的前幾行
-A,--after-context=NUM    打印匹配的後幾行
-C,--context=NUM    打印匹配的先後幾行
--color[=WHEN],    匹配的字體顏色

博客地址:http://lizhenliang.blog.51cto.com

QQ羣:323779636(Shell/Python運維開發羣)

示例:


1) 輸出b文件中在a文件相同的行

# grep -f a b
2) 輸出b文件中在a文件不一樣的行

# grep -v -f a b
3) 匹配多個模式

# echo "a bc de" |xargs -n1 |grep -e 'a' -e 'bc'
a
bc
4) 去除空格http.conf文件空行或開頭#號的行

# grep -E -v "^$|^#" /etc/httpd/conf/httpd.conf
5) 匹配開頭不分大小寫的單詞

# echo "A a b c" |xargs -n1 |grep -i a
或
# echo "A a b c" |xargs -n1 |grep '[Aa]'
A
a
6) 只顯示匹配的字符串

# echo "this is a test" |grep -o 'is'
is
is
7) 輸出匹配的前五個結果

# seq 1 20  |grep -m 5 -E '[0-9]{2}'
10
11
12
13
14
8)統計匹配多少行

# seq 1 20  |grep -c -E '[0-9]{2}'
11
9) 匹配b字符開頭的行

# echo "a bc de" |xargs -n1 |grep '^b'
bc
10) 匹配de字符結尾的行並輸出匹配的行

# echo "a ab abc abcd abcde" |xargs -n1 |grep -n 'de$'
5:abcde
11) 遞歸搜索/etc目錄下包含ip的conf後綴文件

# grep -r '192.167.1.1' /etc --include *.conf
12) 排除搜索bak後綴的文件

# grep -r '192.167.1.1' /opt --exclude *.bak
13) 排除來自file中的文件

# grep -r '192.167.1.1' /opt --exclude-from file
14) 匹配41或42的數字

# seq 41 45 |grep -E '4[12]'
41
42
15) 匹配至少2個字符

# seq 13 |grep -E '[0-9]{2}'
10
11
12
13
16) 匹配至少2個字符的單詞,最多3個字符的單詞

# echo "a ab abc abcd abcde" |xargs -n1 |grep -E -w -o '[a-z]{2,3}'
ab
abc
17) 匹配全部IP

# ifconfig |grep -E -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
18) 打印匹配結果及後3行

# seq 1 10 |grep 5 -A 3
5
6
7
8
19) 打印匹配結果及前3行

# seq 1 10 |grep 5 -B 3
2
3
4
5
20) 打印匹配結果及先後3行

# seq 1 10 |grep 5 -C 3
2
3
4
5
6
7
8
21) 不顯示輸出

不顯示錯誤輸出:

# grep 'a' abc
grep: abc: No such file or directory
# grep -s 'a' abc
# echo $?
2
不顯示正常輸出:
# grep -q 'a' a.txt
grep支持上一章的基礎和擴展正則表達式字符。
相關文章
相關標籤/搜索