Linux命令 - grep

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

你可能感兴趣的:(Linux命令 - grep)