【Linux】使用grep命令查找文件内容

grep简介
  1. grep是linux中最为常用的三大文本(awk,sed,grep)处理工具之一
  2. grep它能使用正则表达式搜索文本,并把匹配的行打印出来。
  3. grep全称是Global Regular Expression Print,表示全局正则表达式打印,它的使用权限是所有用户。
  4. grep家族总共有三个:grep,egrep,fgrep(自己了解区别)
grep语法

grep pattern [file...]

  • grep "搜索字符串" [filename]
  • grep "正则表达式" [filename]
  • 在文件中搜索所有 pattern 出现的位置, pattern 既可以是要搜索的字符串,也可以是一个正则表达式.
  • 注意:在输入要搜索的字符串时最好使用双引号/而在模式匹配使用正则表达式时,注意使用单引号
grep常用选项
选项描述
-E开启扩展(Extend)的正则表达式
-i忽略大小写(ignore case)
-r递归查找
-R查找所有文件包含子目录
-v反过来(invert),只打印没有匹配的,而匹配的反而不打印
-n显示行号
-w被匹配的文本只能是单词,而不能是单词中的某一部分,如文本中有liker,而我搜寻的只是like,就可以使用-w选项来避免匹配liker
-c显示总共有多少行被匹配到了,而不是显示被匹配到的内容,注意如果同时使用-cv选项是显示有多少行没有被匹配到。
-o只显示被模式匹配到的字符串。
–color将匹配到的内容以颜色高亮显示。
-A n显示匹配到的字符串所在的行及其后n行,after
-B n显示匹配到的字符串所在的行及其前n行,before
-C n显示匹配到的字符串所在的行及其前后各n行,context
示例
  • 查询/home/tomcat10086/logs/catalina-2019-12-03.out 文件中 所有包含‘csv’的行
    在这里插入图片描述
  • 查询/home/tomcat10086/logs/catalina-2019-12-03.out 文件中 所有‘csv’
    在这里插入图片描述
  • 查询/home/tomcat10086/logs/catalina-2019-12-03.out 文件中 所有包含‘csv’的行并显示行号在这里插入图片描述
模式匹配
  1. 直接输入要匹配的字符串,这个可以用fgrep(fast grep)代替来提高查找速度,比如我要匹配一下error.txt文件中printf的个数:fgrep -c "printf" error.txt

  2. 使用基本正则表达式,下面谈关于基本正则表达式的使用

主要参数

选项描述
\忽略正则表达式中特殊字符的原有含义
^匹配正则表达式的开始行
$匹配正则表达式的结束行
<从匹配正则表达 式的行开始
>到匹配正则表达式的行结束
[ ]单个字符,如[A]即A符合要求
[ - ]范围,如[A-Z],即A、B、C一直到Z都符合要求 。
.任意一个字符
*有字符,长度可以为0
grep命令使用简单实例
# 显示所有以d开头的文件中包含 搜索字符串的行。
grep ‘搜索字符串’ d*
# 显示在aa,bb,cc文件中匹配搜索字符串的行。
grep ‘搜索字符串’ aa bb cc
# 显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
grep[a-z]\{5\}’ aa
# 如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用”\”号进行转义,直接写成’w(es)t.*\1′就可以了。
grep ‘west.*\1′ aa
# 多个文件查询
grep "sort" *.doc       #输出以doc结尾文件中包含 sort 的行
#行匹配:输出匹配行的计数
grep -c "48" data.doc   #输出文档中含有48字符的行数
#显示匹配行和行数
grep -n "48" data.doc       #显示所有匹配48的行和行号
#显示非匹配的行
grep -vn "48" data.doc      #输出所有不包含48的行
#显示非匹配的行
grep -vn "48" data.doc      #输出所有不包含48的行
#大小写敏感
grep -i "ab" data.doc       #输出所有含有ab或Ab的字符串的行
grep命令使用复杂实例
# 不区分大小写地搜索。默认情况区分大小写,
grep -i pattern files 
# 只列出匹配的文件名
grep -l pattern files 
# 列出不匹配的文件名
grep -L pattern files 
# 只匹配整个单词,而不是字符串的一部分(如匹配’magic’,而不是’magical’),
grep -w pattern files 
# 匹配的上下文分别显示[number]行
grep -C number pattern files
# 查找当前目录(包含子目录)的字符串:
grep -r pattern  *
# 查找当前目录(包含子目录)的字符串,并输出行号:
grep -rn pattern *
# 显示匹配 pattern1 或 pattern2 的行
grep pattern1 | pattern2 files 
# 显示既匹配 pattern1 又匹配 pattern2 的行
grep pattern1 files | grep pattern2 
# 即可显示行号信息
grep -n pattern files  
# 可查找总行数
grep -c pattern files  

正则表达式的应用 (注意:最好把正则表达式用单引号括起来)

# \< 和 \> 分别标注单词的开始与结尾。
#‘^’:指匹配的字符串在行首
#‘$’:指匹配的字符串在行尾

grep man *  # 会匹配 ‘Batman’、’manic’、’man’等,
grep ‘\<man’ *  # 匹配’manic’和’man’,但不是’Batman’,
grep ‘\<man\>#只匹配’man’,而不是’Batman’或’manic’等其他的字符串。
grep '[239].' data.doc  #输出所有含有以2,3或9开头的,并且是两个数字的行
grep '^[^48]' data.doc      #不匹配行首是48的行
#使用扩展模式匹配
grep -E '219|216' data.doc
cat/more/tail 与 grep组合使用
  • cat+grep
# 搜索  catalina-2019-12-03.out 文件中 所有包含  'csv' 的行
cat -n catalina-2019-12-03.out | grep 'csv'
  • more +grep
# 搜索  catalina-2019-12-03.out 文件中 所有包含  'csv' 的行
more   catalina-2019-12-03.out | grep 'csv'
  • tail +grep
# 动态搜索  catalina-2019-12-03.out 文件中 所有包含  'csv' 的行
tail -f catalina-2019-12-03.out | grep 'csv'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墩墩分墩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值