zoukankan      html  css  js  c++  java
  • Linux三剑客 grep

    Linux系统中grep命令是一种强大的文本搜索工具,全称是Global Regular Expression Print,它能在文件中搜索符合要求的文本,并把匹配的行打印出来。它的使用权限是所有用户,大多数情况下,grep命令都是配合管道符使用,以期获得符合要求结果。

    grep 参数 查找条件 文件名

    一、主要参数

    -i(--ignore-case):不区分大小写。

    -c(--count):只输出匹配行的计数。

    -l(--files-with-matches):查询多文件时只输出包含匹配字符的文件名。

    -n(--line-number):显示匹配行及行号。

    -r(--recursive);递归的读取目录下的所有文件,包括子目录。

    -s(--silent):不显示不存在或无匹配文本的错误信息。

    -v(--revert-match):显示不包含匹配文本的所有行。

    -q(--quiet):取消显示,只返回退出状态。0则表示找到了匹配的行。

    -?:同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。

    -h(--no-filename):当搜索多个文件时,不显示匹配文件名前缀。

    -o(--only-matching);只显示正则表达式匹配的部分。

    -w(--word-regexp):匹配整个单词,如果是字符串中包含这个单词,则不作匹配。

    二、示例

    从文本文件中搜索test字符串

    可以看到包含有"test"的行被打印出来,默认grep是区分大小写的。

    所以"Test","TEST"没有被匹配出来。

    1、-i

    如果想要不区分大小写,我们可以加"-i"的参数。

    如下:

    当前我们的测试文本内容比较少,我们肉眼可以见到是在第几行。

    2、-n

    如果文本行数较多的情况下那就不太方便了,这里就可以用到"-n"的参数

    包含有"test"的并且不区分大小写的行在开头会显示行号,现在的结果中匹配的关键字所在行全部内容都会输出。

    3、-o

    如果只想要看到匹配的关键字,怎么办?

    使用"-o"参数即可

    4、-r

    有时候我们需要对整个目录去搜索关键字,如果直接使用grep "test" 目录名,会报错。

    加参数'-r'就可以避免这个问题

    5、-q

    可以看到shellTest目录下的两支文件test1.txt以及testfile都包含test被打印出来了

    “-q”选项表示使用静默模式,在此模式下grep命令不会有任何的打印结果,无论是否有匹配到。

    一般来说我们可以根据echo $?

    来查看上一条指令(grep)的执行结果,如果返回结果为0,表示grep有匹配到了,如果返回结果为1,表示grep没有匹配到。

    一般我们可以shell脚本中去用if条件分支进行判断,如果echo $?结果为0,就去执行相应的操作

    三、grep结合pattern正则

    前面我们介绍了参数的基本用法,grep的强大之处其实是和正则表达式一起才有作用。

    我们知道在正则表达式中分为了两类:

    01 基本正则表达式

    ◆ . 单个字符

    ◆ * 表示前面的字符连续出现任意次,包括0次

    ◆ ^ 表示锚定行首

    ◆ $ 表示锚定行尾

    ◆ [a-z] [0-9] 区间范围

    ......

    02 扩展正则表达式

    ◆ ?表示匹配其前面的字符0或1次

    ◆ + 表示匹配其前面的字符至少1次,或者连续多次,连续次数上不封顶。

    ◆ () 分组

    ◆ {} 连续匹配

    ◆ | 匹配多个表达式的任何一个

    ......

    如查询以"lemon"单词开头

    查找文件中空白行的数量

    正则“^$”表示空白行,参数“-c”表达计算行数

    连续字数的正则匹配,如:查找“appium”,p是连续的

    “{2}”表示p连续出现了两次,可以发现结果是匹配不到的。

    因为{}是扩展正则表达式,grep默认是基本正则表达式,如果需要支持扩展正则表达式,我们需要加"-E"选项:

    更多分享请访问博客 海马搜索 www.hmsou.com

  • 相关阅读:
    CPU 后缀
    获取当前IP的接口
    win10 禁用自动更新
    C# 调用腾讯云接口获取视频基本信息
    SQL Server服务器角色和数据库角色描述
    C# 使用cmd
    C# 对DataTable的简单操作
    参考文档链接地址-个人比较推荐的
    类似input框内最右边添加图标,有清空功能
    CentOS-6.3安装Mysql-5.5.29[转]
  • 原文地址:https://www.cnblogs.com/jasoncheetah/p/11718329.html
Copyright © 2011-2022 走看看