grep正则表达式详解及练习

一、在学习grep正则表达式前,先了解下linux著名的文本处理三剑客:

(1)grep、egrep、fgrep 文本搜索工具。

(2)sed     文本编辑工具,一种流编辑器,行编辑工具。

(3)awk 强大的文本分析工具,文本格式化工具,文本报告生成器。

以上三大命令均支持正则表达式,本文以grep正则表达式为例展开学习。

1、什么是正则表达式?

正则表达式(Regular Expression):由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意义,而是用于表示控制或通配的功能。正则表达式只是字符串的一种描述(一种表示法),只有和支持正则表达式的工具相结合才能进行字符串处理。

2、正则表达式的构成:

正则表达式由两种字符构成。一种是在正则表达式中具体特殊意义的“元字符”,另一种是普通的“文本字符”。元字符可以是一个字符,如“^”,也可以是一个字符序列,如“\b”。

3、主要分为两类:(1)基本正则表达式(BRE)

(2)扩展正则表达式(ERE)

二、本文以grep为例来讲解正则表达式

1、grep家族有三大成员分别为:

grep:支持使用基本正则表达式。

egrep:支持使用扩展正则表达式。

fgrep:不支持使用正则表达式。

2、grep命令:

功能:根据用户指定的”pattern(过滤条件)“对目标文本逐行进行匹配检查;打印出符合条件的行,即文本搜索工具。注:PATTERN即过滤条件指由文本字符及正则表达式元字符所编写的字符串。

常用选项一:

--color=auto,每次grep搜索之后,自动高亮显示所匹配字符。

CentOS7定义了grep别名alias grep=’grep--color=auto’

-i:忽略字符大小写

-o:仅输出文件中匹配到的部分

-v:反向查找,输出文件中不匹配的行。

-q:进入静默模式,该模式下,grep命令运行目的仅仅是执行一个条件测试,通常在脚本中使用,通过检查其返回值进行下一步操作。

常用选项二:

-E:支持使用扩展正则表达式,相当于egrep;

-F:支持使用固定字符串,不支持正则表达式,相当于fgrep;

-G:支持使用基本正则表达式;

-P:支持使用pcre正则表达式;

-A:显示匹配字符串及后n行的数据

-B:显示匹配字符串及前n行的数据

-C: 显示匹配字符串及前后各n行的数据

-e:多模式机制;

-f:FILE为每行包含了一个pattern的文本文件,即grep script;

-n:在行首显示行号

3、基本正则表达式元字符:

(1)字符匹配:

.:匹配任意单个字符

[ ]:匹配范围内的任意单个字符    [abc]表示“a”或“b”或“c”

[^ ]:匹配范围外的任意单个字符   [^abc]表示除了“a”、“b”、“c”外的其他任意字符。

(2)匹配次数: 用在要指定其出现的次数的字符后面,限制其前面字符出现的次数,默认工作在贪婪模式。

*: 匹配前面的字符任意次(0、1、或多次),相当于\{0,\}

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

\+:匹配前面的字符至少1次,相当于\{1,\}

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

\{m\}:其前面的字符出现m次,m为非负整数;

\{m,n\}:其前面字符出现最少m次最多n次,\{m,\}最少m次,\{o,n\}最多n次;

(3)位置锚定:限制使用搜索模式搜索文本,限制模式所匹配到的文本只能出现于目标文本的那个位置

^: 行首锚定;用于模式的最左侧,^PATTERN ,  ^hello搜寻以hello开头的行。

$: 行尾锚定;用于模式的最右侧,PATTERN$ ,  hello$搜寻以hello结束的行。

^PATTERN$: 让PATTERN完全匹配一整行, ^how are you$搜索内容为”how are you”的行。

^$ :搜寻内没有任何字符的行(包括空白字符),空行

^[[:space:]]*$ :空行或仅有空白字符的行;

(4)单词锚定:  Linux中的单词指:由非特殊字符组成的连续字符(字符串)。

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

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

\<PATTERN\>:单词锚定

(5)分组与引用:

\(PATTERN\):将此PATTERN匹配到的字符作为一个不可分割的整体进行处理;分组匹配到的内容会被正则表达式引擎自动记录到内部变量中,这些变量是\1,\2,\3,…

pat1\(pat\2)pat3\(pat4\(pat5\)pat\)

\1:第一组括号中的pattern匹配到的字符串,从左侧起,第一个左括号及与之匹配的右括号内模式匹配到的内容。

\2:第二组括号中的pattern匹配到的字符串,从左侧起,第二个左括号及与之匹配的右括号内模式匹配到的内容。

后向引用:引用前面括号中的模式所匹配到的字符

输出结果中行首字符跟行尾字符相同(行尾引用了行首匹配到内容)。

4、egrep命令:

支持使用扩展正则表达式的grep命令,相当于grep -E,其常用选项基本同grep命令,可参考上文。

5、扩展正则表达式元字符:

扩展正则表达式就是在基本正则表达式的基础上,增加了一些元字符,而且有部分参数是不需要添加\转义符使用的。

(1)字符匹配:

.:匹配任意单个字符

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

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

(2)匹配次数:

*:  匹配前面的字符任意次(0、1、或多次);

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

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

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

{m}:其前面的字符出现m次,m为非负整数;

{m,n}: 其前面字符出现最少m次最多n次,{m,}最少m次,{o,n}最多n次

(3)位置锚定:

^:行首

$:行尾

\<\b:词首

\>,\b:词尾

(4)分组及引用:

( ):分组

\1,\2,:后向引用

注意:特殊用法

C|cat:表示C或cat ,表示整个左侧或整个右侧。

(C|c)at:表示Cat或cat

三、作业练习:

1、显示/etc/passwd文件中以bash结尾的行;

2、找出/etc/passwd文件中的三位或四位数;

3、找出/etc/grub2.cfg文件中,以至少一个空白字符开头,后面又跟了非空白字符的行

4、找出"netstat  -tan”命令的结果中,以‘LISTEN’后跟0或多个空白字符结尾的行;

5、找出"fdisk  -l“命令的结果中,包含以/dev/后跟sd或hd及一个字母的行;

6、找出”ldd  /usr/bin/cat“命令的结果中文件路径;

7、找出/proc/meminfo文件中,所有以大写或小写s开头的行;至少用三种方式实现;

8、显示当前系统上root、centos或spark用户的相关信息;

9、echo输出一个绝对路径,使用egrep取出其基名;

10、找出ifconfig命令结果中的1-255之间的整数;

11、找出系统中其用户名与shell名相同的用户。

转载于:https://blog.51cto.com/zhangpenglinux/1748897

grep正则表达式详解及练习相关推荐

  1. 【Linux】grep正则表达式详解

    grep正则表达式 语法格式: grep [options] PATTERN [FILE...] grep [options] [-e PATTERN | -f FILE] [FILE...] 匹配模 ...

  2. linux下grep文件内容搜索工具及基本正则表达式详解

    linux下grep文件内容搜索工具及基本正则表达式详解 grep命令: 根据模式(文本字符和基本正则表达式的元字符组合而成之匹配条件)搜索文本, 并将符合模式的文本行显示出来. 格式:grep [选 ...

  3. linux中grep命令 菜鸟教程,linux grep正则表达式与grep用法详解

    需要大家牢记:正则表达式与通配符不一样,它们表示的含义并不相同 正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理.本文以grep为例来讲解正则表达式. grep命令 ...

  4. linux命令ps -aux|grep xxx详解

    linux命令ps -aux|grep xxx详解 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大 ...

  5. java判断颜色合法_判断颜色是否合法的正则表达式(详解)

    判断颜色是否合法的正则表达式(详解) "^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$"; 意思是:以#开头,后面是数字和a-f的字符(大写或小写),这个值是 ...

  6. linux xxx命令,linux命令ps aux|grep xxx详解

    对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的进程查看命令. 使用该命令 可以确定有哪些进程正在运 ...

  7. grep命令详解(如何匹配多个字符串)(grep指令)(grep -q)

    文章目录 20221011 grep如何匹配多个标志? 20230412 grep -q(`Use grep -q instead of comparing output with [ -n .. ] ...

  8. 正则,grep命令详解

    正则表达式和grep.vim.awk.sed等的关系: 正则表达式是一种方法,相当于一种工艺,grep等命令相当于是一个具体的加工机器,机器在加工产品的时候,采用这种方法. 命令是怎么执行的: sel ...

  9. ps aux|grep xxx详解

    linux命令ps aux|grep xxx详解 要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程, 而ps命令(Process Status)就是最基本同时也是非常强大的 ...

  10. grep命令详解(常用参数)

    grep命令详解: grep版本: # grep -V grep (GNU grep) 2.20 ... grep --help(或者"man grep")查看详细语法及参数 语法 ...

最新文章

  1. 牛客练习赛61 E 相似的子串(二分+哈希)难度⭐⭐⭐
  2. Nchain旗下矿池挖出首个BCH区块,“算力战争”真的要来了?
  3. 【语法】点语法的应用
  4. php保存设置,php如何实现编辑和保存文件?
  5. IT自动化:自动化的网络管理变得很重要
  6. 信息奥赛一本通1486: CH 6202 黑暗城堡 最短路径生成树计数
  7. VC学习笔记:文本图形
  8. 菜鸟学习笔记:Java提升篇6(IO流2——数据类型处理流、打印流、随机流)
  9. css 点击效果_使用CSS实现逼真的水波纹点击效果
  10. 模型描述的关系模式_框架篇:见识一下linux高性能网络IO+Reactor模型
  11. Ubuntu 16.04安装vsftpd 并开启ftp服务
  12. 在子MasterPage设置UserControl内的Web控件属性
  13. run `npm fund` for details
  14. 输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。
  15. ps制作苹果中的返回按钮
  16. Redis运行环境搭建
  17. 基于STC8G2K64S4单片机控制小车循迹(直流电机和步进电机)
  18. jqGrid学习笔记
  19. linux返回上次所在的目录
  20. 软考__第17章 战略管理

热门文章

  1. {$POINTERMATH ON} 方便指针操作的编译指令
  2. Scrapy框架之日志等级
  3. python学习第六天运算符总结大全
  4. linux中安装typecho的pathinfo配置
  5. RHEL 7.2 源码安装Python 3.6.2报错
  6. 201521123014《Java程序设计》第1周学习总结
  7. 【转】commons-lang.jar包简介
  8. Linux安装virgo
  9. javascript之querySelector和querySelectorAll
  10. python画龙猫_微信小程序支付demo,后端使用python