当前位置: 首页 > news >正文

grep


grep: Global search REgular expression and Print out the line.

模式:由正则表达式字符及文本字符所编写的过滤条件;

REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或通配的功能;

分两类:

基本正则表达式:BRE

扩展正则表达式:ERE

  • COMMAND

grep [OPTIONS] PATTERN [FILE...]

--color=auto: 对匹配到的文本着色显示;

-v: 显示不能够被pattern匹配到的行;

-i: 忽略字符大小写;

-o: 仅显示匹配到的字符串;

-q: 静默模式,不输出任何信息;

-A #after, #

-B #: before, #

-C #context, 前后各#

-E:使用ERE

 EXAMPLE:

显示/tmp/meminfo文件中以大小s开头的行l

[root@locahost /]# egrep -o "^[S,s]*" /tmp/meminfo

显示/etc/passwd文件中不以/bin/bash结尾的行

[root@localhost /]# grep -v "/bin/bash$" /etc/passwd

显示/etc/passwd文件中ID号最大的用户的用户名

[root@localhost /]# sort -t: -nr -k 3 /etc/passwd | head -n 1 | cut -d: -f 1,3

如果用户root存在,显示其默认的shell程序;

id root &> /dev/null && grep "^root" /etc/passwd | cut -d: -f 1,7

找出/etc/passwd中的两位或三位数

[root@localhost /]# grep "[0-9]\{2,3\}" /etc/passwd


  • 基本正则表达式元字符:

字符匹配:

.:  匹配任意单个字符;

[]: 匹配指定范围内的任意单个字符

[^]:匹配指定范围外的任意单个字符

[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数;

*:匹配前面的字符任意次;

例如: grep "x*y"

abxy

xay

xxxxxxy

贪婪模式

.*:任意长度的任意字符;

\?:匹配其前面的字符0或1次;即前面的可有可无;

\+:匹配其前面的字符至少1次;

\{m\}:匹配前面的字符m次;

\{m,n\}:匹配前面的字符至少m次,至多n次;

\{0,n\}:匹配前面的字符至多n次;

\{m,\}:匹配前面的字符至少m次;

位置锚定:

^:行首锚定;用于模式的最左侧;

$:行尾锚定;用于模式的最右侧;

^PATTERN$: 用于模式匹配整行;

^$: 空行;

^[[:space:]]*$

\< 或 \b:词首锚定;用于单词模式的左侧;

\> 或 \b:词尾锚定;用于单词模式的右侧;

\<PATTERN\>:匹配整个单词;

分组:

\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;

\(xy\)*ab

 

Note: 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...

\1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;

\(ab\+\(xy\)*\):

\1: ab\+\(xy\)*

\2: xy

 

后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身)






      本文转自echoroot 51CTO博客,原文链接:http://blog.51cto.com/echoroot/1921673,如需转载请自行联系原作者





相关文章:

  • CentOS6.6+Puppet3.7.4分布式部署Nagios监控系统
  • SCVMM2012SP1异构虚拟化ID 22723问题解决
  • 时空日期审核错误修正
  • 一个java写的弹球小游戏
  • python 之浅谈接口的定义和抽象类以及抽象方法
  • Kickstart无人值守安装
  • mysql 备份脚本
  • vsftp安装与下载
  • Walle代码发布练习
  • Nagios Cacti
  • TCP的TIME_WAIT快速回收与重用
  • 学习笔记 八: web服务
  • 告警系统
  • 改造了房屋布线
  • ORA-12547:TNS:lost contact 问题分析思路
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Java 最常见的 200+ 面试题:面试必备
  • JS题目及答案整理
  • Vue.js 移动端适配之 vw 解决方案
  • Yii源码解读-服务定位器(Service Locator)
  • 计算机在识别图像时“看到”了什么?
  • 蓝海存储开关机注意事项总结
  • 容器服务kubernetes弹性伸缩高级用法
  • 数据仓库的几种建模方法
  • 思否第一天
  •  一套莫尔斯电报听写、翻译系统
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #ifdef 的技巧用法
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (003)SlickEdit Unity的补全
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .form文件_SSM框架文件上传篇
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net core 6 redis操作类
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .Net6 Api Swagger配置
  • .net与java建立WebService再互相调用
  • .so文件(linux系统)
  • @SentinelResource详解
  • @SuppressWarnings注解
  • [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2019-6116
  • [120_移动开发Android]008_android开发之Pull操作xml文件
  • [20161101]rman备份与数据文件变化7.txt
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [ASP]青辰网络考试管理系统NES X3.5
  • [C# 基础知识系列]专题十六:Linq介绍