目录

一、正则表达式

1、正则表达式概述

2、基础正则表达式

3、扩展正则表达式

二、grep命令

1、查找特定字符grep -n 'the' test.txt

2.利用中括号"[]"来查找集合字符

3. 查找行首“^”与行尾字符"$"

4.查找任意一个字符".“与重复字符”*"

5.查找连续字符范围"{}"


一、正则表达式

1、正则表达式概述

正则表达式又称正规表达式、常规表达式。在代码中常简写为regex、regexp或RE。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特点字符串。

正则表达式是:由普通字符与元字符组成的文字模式

普通字符包括大小写字母、数字、标点符号及一些其他符号

元字符是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式

正则表达式一般用于脚本编程与文本编辑中

Linux 中常用的有两种正则表达式引擎

基本正则表达式:BRE

扩展正则表达式:ERE

文本处理工具 基础正则表达式 扩展正则表达式
vi编辑器            支持               \
grep            支持               \
egrep            支持            支持
sed            支持               \
awk            支持             支持

2、基础正则表达式

基础正职表达式是常用的正则表达式部分,常用的元字符及作用如下表示:

 元字符                                   作用
     \ 转义字符,用于取消特殊符号,如:\!  ,    \n
    ^ 匹配字符串开始的位置,如:^world 匹配以world 开头的行
    $ 匹配字符串结束的位置,如:world$ 匹配以world 结尾的行
     . 匹配除\n (换行)之外的任意的一个字符
    * 匹配前面子表达式0次或者多次
[list] 匹配list列表中的一个字符,如:[ 0-9 ]  匹配任意一位数字
 [ ^list ] 匹配任意不在list列表中的一个字符,如:[^0-9] 匹配任意一位非数字字符
\{n,\} 匹配前面的子表达式n次,如:[0-9]{ 2\} 匹配两位数字
\{n,\} 匹配前面的子表达式不少于n次,如:[0-9]\{2\} 表示两位及两位以上数字
\{n,m\} 匹配前面的子表达式n到m次,如:[ a-z ]\ {2,3\} 匹配两到三位的小写字母

注意egrpep ,awk使用{n}、 {n,}  {n,m} 匹配时“{}”钱不要加 “\”

egrep  -E   -n  'wo{2}d'  test.txt                 -E用于显示文件中符合条件的字符

egrep  -E   -n  'wo{2,3}d'  test.txt

3、扩展正则表达式

扩展正则表达式是对基础正则表达式的扩充和深化

支持的工具有egerp和awk

扩展正职表达式元字符

元字符 作用
   + 匹配前面子表达式1次以上,如:go+d,将匹配至少一个0
   ? 匹配前面子表达式0次或者1次,如:go?d,将匹配gd或god
() 将括号中的字符串作为一个整体,如:g(oo)+d,将匹配。整体1次以上,如good,goooood等
   | 以或的方式匹配字条串,如:good l great,将匹配good或则great

定位符

^匹配输入字符串开始的位置

$匹配输入字符串结尾的位置

非打印字符

\n 匹配一个换行符

\r 匹配一个回车符

\t匹配一个制表符

二、grep命令

grep命令使用正则表达式来搜索文本,并且把匹配的文本打印出来

格式:

grep  [options]  pattern  [file]

option表示选项,pattern表示匹配的模式。file表示一系列文件名。

常用选项:

-c        只打印匹配的文本行的次数,不显示文本内容。

-i         匹配时忽略字母大小写

-h        当搜索多个文件,不显示匹配文件名前缀

-l         只列出含义匹配的文本名,不显示其具体匹配的内容。

-n        列出所有匹配的文本行,并显示行号

-s        不显示关于不存在或无法读取文件的错误信息

-v        只显示不匹配的文本行,反向选择,显示与搜索字符串不相符的行。

-w        匹配整个单词

-x         匹配整个文本行

-r          递归搜索,不仅搜索当前目录,还有各级子目录

-E         开启扩展(extend)的正则表达式

--color=auto 可以将找到的关键词部分加上颜色的显示

三、正则匹配

准备一个test.txt的文件演示

1、查找特定字符
grep -n 'the' test.txt

 “test”  ’test‘单双引号都行  查找特定字符"the"所在位置。-n表示显示行号、-i表示不区分大小写

grep -in 'the' test.txt

若反向选择,如查找不包括"the"字符的行,则需要通过grep命令的"-v"选项实现,并配合"-n"一起使用显示行号

2.利用中括号"[]"来查找集合字符

当查找“shirt”与“short”者两个字符时,两个字符均包括“sh”与“rt”。
同时查找到“shirt”与“short”这两个字符串
在[   ]  中无论有几个字符,都仅代表一个字符,也就是说“[  ]”表示匹配“i”或者“o”

 查找包含重复单个字符“oo”

若查找"oo"前面不是"w"的字符串,只需要通过集合字符的反向选择"[^]"来实现该目的

在上述命令的执行结构发现”woood”与“whoooood”也符合匹配规则,二者均包含"w".其实通过执行结果就可以看出,符合匹配标准的字符加粗显示

 “#woood #”中加粗显示的是“ooo”,而“oo”前面的“o”是符合匹配规则的。同理“#woooooood #” 也符合匹配规则。

若不希望“oo”前面存在小写字母可以使用"grep -n ‘[ ^a-z]oo’ test.txt"实现。

其中,“a-z”表示小写字母,大写字母则通过“A-Z”表示。

查找包含数字的行可以通过"grep -n ‘[0-9]’ test.txt"命令

3. 查找行首“^”与行尾字符"$"

基础正则表达式包含两个定位元字符:“^”(行首)与"$"(行尾)。如果想要查询以"the"字符串为行首的行,则可以通过" ^"元字符来实现。

查询以小写字母开头的行可以通过"^a-z"规则来过滤

查询大写字母开头的行则使用" ^A-Z"规则

若查询不以字母开头的行则使用" ^ [ ^a-zA-Z]"规则

"^“符号在元字符集合”[    ]“符号内外的作用时不一样的

在”[   ]“符号内表示反向选择,在”[     ]"符号外则代表定位行首。

反之,若想查找以某一特定字符结尾的行则可以使用 $定位符。

执行以下命令即可实现查询以小数点”.“结尾的行。

因为小数点".“在正则表达式中也是一个元字符,

所以需要用转义字符”"将具有特殊意义的字符转化成普通字符

当查询空白行时,执行"grep -n ‘^$’ test.txt"即可

4.查找任意一个字符".“与重复字符”*"

在正则表达式中小数点"."也是一个元字执行

"grep -n ‘w…d’ test.txt"可以查找"w??d"的字符串

即共有四个字符,以w开头d结尾符

查询oo、ooo、oooo等资料,则需要使用  *  “  ”  元字符
“  ”代表的时重复零个或多个前面的单字符。“o”表示拥有零个(即空字符)或大于等于一个“o”的字符   因为允许空字符,所有执行“grep -n ‘o’ test.txt”  会将文本中的所有内容都输出打印。

查询任意数字所在行

5.查找连续字符范围"{}"

如果要查找三到五个的连续字符,这个时候就需要使用基础正则表达式中的限定范围的字符"{}“。因为”{}“在Shell中具有特殊意义,所以在使用”{}“字符时,需要利用转义字符”“,将”{}"字符转换成普通字符

查询两个o的字符

查询以w开头以d结尾,中间包含2-5个o的字符

查询以w开头以d结尾,中间报班两个或两个以上o的字符串

四、扩展正则表达式
通常情况下会使用基础正则表达式就已经足够了,但有时为了简化整个指令,需要使用范围更广的扩展正则表达式。例如使用基础这个则表达式查询除文件中空白行与行首为"#"之外的行,使用grep -v ‘^$’ test.txt |grep -v ’ ^#‘即可实现。这里需要使用管道命令来搜索两次。如果使用扩展正则表达式,可以简化为egrep -v ’ ^ $ | ^#’ test.txt,其中单引号中的管道符号表示或者(or)
此外,grep命令仅支持基础正则表达式,如果使用扩展正则表达式,需要使用egrep或awk命令。egrep命令与grep命令的用大基本相似。egrep命令是收缩文件获得模式,使用该命令可以搜索文件获得模式,使用该命令可以搜索文件中的任意字符串和符号,也可以收缩一个或多个文件的字符串,一个提示符一课时单个字符、一个字符串、一个字或一个句子。

扩展正则表达式常见元字符

+
    作用:重复一个或者一个以上的前一个字符
    示例:执行"egrep -n 'wo+d' test.txt"命令,即可查询"wood" "woood" "wooood"等字符串


    作用:零个或者一个的前一个字符 
    示例:执行"egrep -n 'bes?t' test.txt"命令,即可查询“bet”“best”这两个字符串


    作用:使用或者(or)的方式找出多个字符 
    示例:执行"egrep -n 'of|is|on' test.txt"命令即可查询"of"或者"if"或者"on"字符串    

() 
    作用:查找“组”字符串 
    示例:"egrep -n 't(a|e)st' test.txt"。"tast"与"test"因为这两个单词的"t"与"st"是重复的,所以将"a"与"e" 列于“()”符号当中,并以"|"分隔,即可查询"tast"或者"test"字符串

()+ 
    作用:辨别多个重复的组 
    示例:"egrep -n 'A(xyz)+C' test.txt"。该命令是查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串的意思

shell之正则表达式及grep命令相关推荐

  1. 正则表达式(grep命令,egrep命令,sed命令,awk命令,sort工具,uniq工具)

    文章目录 正则表达式 基础正则表达式:grep命令 查找行首"^"与行尾字符"$ 查找连续字符范围{} 元字符总结 正则表达式总结 扩展正则表达式 egrep命令 sed ...

  2. Linux shell基础(四)正则表达式与grep命令 beta

    一.正则表达式 之前学习find命令时,就已经接触过一些简单的正则,那么我们现在来学习一些复杂的正则.首先,我们还是来复习什么是正则表达式,看这个教程先,一定要多看几遍,至少知道正则大概长什么样子.( ...

  3. linux命令行 正则,Linux shell基础(四)正则表达式与grep命令 beta

    一.正则表达式 之前学习find命令时,就已经接触过一些简单的正则,那么我们现在来学习一些复杂的正则.首先,我们还是来复习什么是正则表达式,看这个教程先,一定要多看几遍,至少知道正则大概长什么样子.( ...

  4. 每天学一点儿shell:Linux三剑客——grep命令

    文章目录 前言 正则表达式 grep命令用法 grep命令实例 用法一:查找root字符串的行数以及内容 用法二:查找"core id"字符串以及前后2行内容 用法三:匹配包含&q ...

  5. grep 判断不是正则的_Shell—正则表达式(grep命令、sed工具)

    前言 正则表达式对于系统管理员来说是非常重要的,熟练运用正则表达式可使工作变得更加简单.方便. 一.正则表达式概述 正则表达式定义 正则表达式,又称正规表达式.常规表达式 使用字符串来描述.匹配一系列 ...

  6. Linux下正则表达式和grep命令的使用

    使用规则表达式要养成良好的习惯,就是在匹配模式的两端加上''.这样和shell的文件通配符号做区别.  正规表示法( Regular Exdivssion,RE ) 1 什么是正规表示法: 什么是正规 ...

  7. Shell grep命令

    一.简介 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全 ...

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

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

  9. linux grep正则表达式与grep用法详解

    正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理.本文以grep为例来讲解正则表达式. grep命令 功能:输入文件的每一行中查找字符串. 基本用法: grep [- ...

最新文章

  1. NCP1271的使用
  2. MySQL在多表上创建视图
  3. python描述图片内容_深度学习实现图像中文描述
  4. Chameleon Install3.0变色龙windows安装程序
  5. python六种数据类型不可变_python面试题(-)可变数据类型与不可变数据类型
  6. 利用python语言实现分类算法_使用python实现kNN分类算法
  7. CentOS下配置多个Tomcat同时运行 本篇文章来源于 Linux公社网站(www.linuxidc.com)
  8. 洛谷题解 P1005 【矩阵取数游戏】
  9. WinRAR4.0注册码
  10. 大数据时代下的人工智能医疗
  11. 个人商业画布分析-0408-v1.0王玉娟
  12. 计算机键盘在线识别,电脑的外接键盘无法识别怎么办?
  13. 功放的工作原理与作用
  14. 【CV系列】Retinex理论模型及其应用
  15. 百度地图、腾讯地图坐标转换
  16. 【毕业设计】基于单片机的火灾报警系统 -stm32 单片机物联网
  17. 2018阿里巴巴秋招java笔试题做题记录
  18. 无需排队!NewBing已向全球个人开放,教程一篇就够了
  19. 天气预报技术这些年有没有发展?什么时候才能准一点?
  20. Linux之CentOS7安装(VMware虚拟机安装及系统安装图文教程)

热门文章

  1. 地理信息系统的元数据、主数据、参考数据之间的区分
  2. 基于单片机的超市储物柜设计_基于单片机的自动存储柜的设计
  3. JAVA的教师档案管理系统_教师档案管理系统的设计与实现
  4. Yolov5 最简推理代码
  5. C语言 计算cosx的近似值
  6. 一文助你入门HTML(❤ ω ❤)
  7. 下载频道2013年超人气精华资源汇总---全都是免积分下载
  8. Python实现1-100猜数字游戏
  9. html+css+js 简易笔记
  10. java jacob更新目录,jacob更新word目录