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、统计匹配到的行数 -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、匹配多个关键字 -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}
# 在搜索结果中排除所有README文件
grep "main()" . -r --exclude "README"
# 在搜索结果中排除filelist文件列表里的文件
grep "main()" . -r --exclude-from filelist
12、打印出匹配文本之前或者之后的行
#显示匹配某个结果之后的3行,使用 -A 选项:
seq 10 | grep "5" -A 3
5
6
7
8
#显示匹配某个结果之前的3行,使用 -B 选项:
seq 10 | grep "5" -B 3
2
3
4
5
#显示匹配某个结果的前三行和后三行,使用 -C 选项:
seq 10 | grep "5" -C 3
2
3
4
5
6
7
8