一、需求
从一个很大的文件里查找某个关键词,并获取其前后的n行内容
二、实现
grep -A2 2 test.txt 返回匹配行和匹配行的后两行
grep -B2 2 test.txt 返回匹配行和匹配行的前两行
grep -C2 2 text.txt 或者 grep -A2 -B2 2 test.txt 返回匹配行和匹配行的前后两行
-A -B -C 后面跟阿拉伯数字
-A 返回匹配后和它后面的n行,(After,之后)。
-B 返回匹配行和它前面的n行,(Before,之前)。
-C 返回匹配行和它前后各n行,通-A和-B联用,(Context,上下文即前后)。
1、返回匹配关键词的前后n行
grep -10 'test' test.txt
grep -C 10 'test' test.txt
2、返回匹配字段"test123"行的前10行
grep -B 10 'test' test.txt
3、返回匹配字段"test123"行的后10行
grep -A 10 'test' test.txt
4、返回的匹配关键词的前后n行的内容写入文件
grep -C 10 'test' test.txt > test1.txt
5、返回匹配关键词(不区分大小写)的前后n行的内容
grep -C -i 10 'test' test.txt
6、返回匹配关键词‘insert into `user`’的前后n行
grep -i -C 10 "insert into \`user\` values" test.txt > test1.txt
等同于cat test.txt | grep "insert into \`user\` values"
注意:关键词中包含linux中的特殊符号 反引号``,想要搜索`user`,需要使用\转移反单引号,这样就可以匹配字符串`user`了
7、grep还支持正则匹配哦
8、多文件中快读查询关键词
grep 'default' *.php
9、目录递归查询关键词
grep -r 'RequestError' */test/*.txt
grep 'istest' /data/*/*.php
10、统计文件中匹配数量
grep -c '"resume_body_weight":null' 20230914.txt
或者
grep -c \"resume_body_weight\":null 20230914.txt