grep是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來.
1生真、基本用法,在文本中搜索一個單詞
grep keyword xxx.log
grep "key word" xxx.log # 當有單詞間有分界符時
grep keyword xx1.log xx2.log # 同時在多個文本中搜索
小例子
# 搜索當前文件夾中所有的文件
grep "error" *
# 搜索當前文件夾中所有的log文件
grep "error" *.log
# 搜索當前文件夾中所有包含redis單詞的文件
grep "error" `ls | grep redis`
2捺宗、行號顯示 -n
# 搜索包含error的行柱蟀,并顯示行號
grep -n "error" xxx.log
3、反向查找 -v
# 搜索不包含error的行蚜厉,并顯示行號
grep -vn "error" xxx.log
4长已、正則查找 -E
grep -E "pid [0-9]{5}" xxx.log
或者
egrep "pid [0-9]{5}" xxx.log
# 好像不支持\d{5}這種寫法...
5、只輸出匹配到的部分 -o
# 只獲取pid
grep -E "pid [0-9]{5}" xxx.log | grep -oE "[0-9]{5}"
6昼牛、統(tǒng)計匹配到的行數(shù) -c
grep -E -c "pid [0-9]{5}" xxx.log
或
grep -E "pid [0-9]{5}" xxx.log | wc -l
7术瓮、查找匹配文件 -l
egrep -l "pid ([0-9]{5})" * # 打印輸出文件名
# -L與-l相對
egrep -L "pid ([0-9]{5})" * # 打印輸出不匹配的文件名
8、在多級目錄中對文本進行遞歸搜索 -r
grep "error" . -r # .表示當前目錄
9贰健、匹配忽略大小寫 -i
echo "hello world" | grep -i "HELLO"
10胞四、匹配多個關(guān)鍵字 -e
echo this is a text line | grep -e "is" -e "line" -o
#也可以使用-f選項來匹配多個樣式,在樣式文件中逐行寫出需要匹配的字符伶椿。
cat patfile
aaa
bbb
echo aaa bbb ccc ddd eee | grep -f patfile -o
11辜伟、制定匹配文件
# 只在目錄中所有的.php和.html文件中遞歸搜索字符"main()"
grep "main()" . -r --include *.{php,html}
# 在搜索結(jié)果中排除所有README文件
grep "main()" . -r --exclude "README"
# 在搜索結(jié)果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist
12、打印出匹配文本之前或者之后的行
#顯示匹配某個結(jié)果之后的3行脊另,使用 -A 選項:
seq 10 | grep "5" -A 3
5
6
7
8
#顯示匹配某個結(jié)果之前的3行导狡,使用 -B 選項:
seq 10 | grep "5" -B 3
2
3
4
5
#顯示匹配某個結(jié)果的前三行和后三行,使用 -C 選項:
seq 10 | grep "5" -C 3
2
3
4
5
6
7
8