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

【Linux】使用grep命令查找文件内容1 grep 是 linux 中最为常用的三大文本 awk sed grep 处理工具之一 2 grep 它能使用 正则表达式 搜索文本 并把匹配的行打印出来 3 grep 全称是 GlobalRegula 表示全局正则表达式打印 它的使用权限是所有用户 4 grep 家族总共有三个 grep egrep fgrep 自己了解区别

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' 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206128.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午4:24
下一篇 2026年3月19日 下午4:24


相关推荐

  • Vue上传文件遇到的问题[通俗易懂]

    Vue上传文件遇到的问题[通俗易懂]问题之前项目中前端使用了vue-cli,引入了上传组件,所以在上传文件时很容易,没有考虑太多问题。image-cropper组件中有url属性,直接使用:url=”文件服务器地址”绑定上传的地址即可。<el-form-itemlabel=”讲师头像”><!–头衔缩略图–><pan-thumb:image=”teacher.avatar”/><!–文件上传按钮–><el-buttontype=

    2022年10月9日
    5
  • 数据库怎么创建学生表_设计数据库,创建数据库和数据表

    数据库怎么创建学生表_设计数据库,创建数据库和数据表知识点:数据库表的相关概念、创建数据库表的方法、设计数据库表、向数据库表中插入数据、建立不同数据库表之间的关系、删除数据库表。1、数据表相关的一些概念1.1数据库里的数据是如何保存的?数据库到底是怎么存储数据的?比如要把学生信息存储到数据库里,能把学生塞进数据库吗?肯定是把学生的数据信息抽象出来,把一些重要信息以文字或数字的形式保存到数据库中去。…

    2026年3月8日
    4
  • TextField的高宽autosize[通俗易懂]

    TextField的高宽autosize[通俗易懂]vart_name:TextField=newTextField;trace(t_name.height);trace(t_name.width);这样打印出来的高度都是100PX,是系统默认的。如果不设置可能会让父容器宽高变大,遮挡住别的窗口的鼠标事件。可以简单地使用tf.autoSize=TextFieldAutoSize.LEFT;来解决这样宽高就会根据文本内容大小来…

    2022年5月15日
    42
  • 超多案例!谷歌AI模型Nano Banana的5个实用+趣味玩法

    超多案例!谷歌AI模型Nano Banana的5个实用+趣味玩法

    2026年3月13日
    2
  • ostaskcreate函数_freertos

    ostaskcreate函数_freertosOSTaskCreate()函数原型:INT8UOSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK*ptos,INT8Uprio)调用者:任务或者是初始化代码。作用:建立一个新任务,任务的建立可以在多个任务环境启动之前,也可以在正在运行的任务中建立,中断处理程序中不能建立任务,一个任务必须为无限循环结构,且不能有返…

    2025年8月26日
    9
  • pycharm安装后运行不了_pycharm暂停程序

    pycharm安装后运行不了_pycharm暂停程序原博客链接:http://blog.csdn.net/qingyuanluofeng/article/details/46501427问题:pycharm安装后不能执行python脚本。我的是执行后老是报错,但是之前在cpython中都是可以的。于是上网查询解决方法原因:pycharm没有设置解析器/解释器设置错误(我的就是因为这个之前设置错了,位置也是错的,结果导致程序不能正常运行出

    2022年8月28日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号