Linux ---- Shell编程之正则表达式

一、正则表达式

​         由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符。

作用:匹配文件中的内容

本质:学习各种各样的元字符并记住这个元字符的含义

1、正则表达式概述

  • 通常用于判断语句中,用来检查某一字符串是否满足某一格式
  • 正则表达式是由普通字符与元字符组成
  • 普通字符包括大小写字母、数字、标点符号及一些其他符号
  • 元字符是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式

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

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

2.正则表达式搜索:

  • 元字符:预定义好的具有特殊含义的符号,这些符号能够进行通配
  • 可读性非常的差
  • 写正则表达式不难

3.部分元字符区别对待:

扩展正则中这些元字符剋直接使用:?、+、{ 、}、| 、(和)。

基础正则中这些元字符需要加反斜线表示转义:\? 、\+ 、 \{  、\}、\| 、\( 和 \)。

grep  sed默认使用基础正则表达式

grep -E 、sed  -r 、 egrep、awk扩展正则表达式

2、基础正则表达式

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

元字符 作用
\ 转义字符,用于取消特殊符号的含义,如:\!,\n
^ 匹配字符串开始的位置,如:^world匹配以world开头的行
$

匹配字符串结束的位置,如:world$匹配以world结尾的行

. 匹配除\n(换行)之外的任意的1个字符
* 匹配前面子表达式0次或着多次
[list] 匹配list列表中的一个字符,如:[0-9]匹配任意一位数字
[^list] 匹配任意不在list列表中的1个字符,如:[0-9]匹配任意一位非数字字符
\ {n\} 匹配前面的子表达式n次,如:[0-9]{2\}匹配两位数字
\ {n.\} 匹配前面的子表达式不少于n次,如:[0-9]\{2,\}表示两位及两位以上数字
\{n,m\} 匹配前面的子表达式n到m次,如:[a-z]\{2,3\}匹配两到三位的小写字母

注意 egrep, awk使用{n}、{n,}、{n,m}匹配时“{}"前不用加“\”

 基本的正则元字符

下面哪些会显示高亮

Linux ---- Shell编程之正则表达式_第1张图片

Linux ---- Shell编程之正则表达式_第2张图片

Linux ---- Shell编程之正则表达式_第3张图片

Linux ---- Shell编程之正则表达式_第4张图片

Linux ---- Shell编程之正则表达式_第5张图片

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

3、扩展正则表达式

  • 扩展正则表达式是对基础正则表达式的扩充和深化
  • 支持的工具有 egerp 和 awk
  • 扩展正则表达式元字符
元字符 作用
+ 匹配前面子表达式1次以上,如:go+d,将匹配至少一个o
匹配前面子表达式0次或着1次,如:go?d,将匹配gd或god
() 将括号中的字符串作为一个整体,如g(oo)+d,将匹配整体1次以上,如good,goooood等
| 以或的方式匹配字条串,如:good | great,将匹配good或着great

1.定位符

  • ^ 匹配输入字符串开始的位置
  • $匹配输入字符串结尾的位置

2.非打印字符

  • \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 可以将找到的关键词部分加上颜色的显示

1、统计包含某个字符的文本行的行数

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

Linux ---- Shell编程之正则表达式_第6张图片

2、不区分大小写查找the所有的行

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

Linux ---- Shell编程之正则表达式_第7张图片

3、将非空行写入到文件中

Linux ---- Shell编程之正则表达式_第8张图片

4、过滤ip地址

Linux ---- Shell编程之正则表达式_第9张图片

三、元字符操作案例

1、查找特定字符

查找出passwd文件中the的位置,其中“-n”表示显示行号、“-i”表示不区分大小写。命令执行后,符合匹配标准的字符, 字体颜色会变颜色。

Linux ---- Shell编程之正则表达式_第10张图片

2、查找特定集合字符

1. 查找既有i又有o的特殊字符

想要查找“shirt”与“short”这两个字符串时,可以发现这两个字符串均包含“sh”与“rt”。此时执行以下命令即可同时查找到“shirt”与“short”这两个字符串,其中“[]”中无论有几个字符, 都仅代表一个字符,也就是说“[io]”表示匹配“i”或者“o”。

Linux ---- Shell编程之正则表达式_第11张图片

2. 查找单个重复字符

查找重复字符,例如“oo”时,会显示两个o及两个o以上的行

Linux ---- Shell编程之正则表达式_第12张图片

3. 查找oo前面不是R开头的行

从后往前看,例如当出现Rooot时,会显示这行,因为从后往前看oo前面还是o,符合条件

Linux ---- Shell编程之正则表达式_第13张图片

4. 查找oo前面不是大小写字母开头的行

Linux ---- Shell编程之正则表达式_第14张图片

5. 查找包含数字的行

Linux ---- Shell编程之正则表达式_第15张图片

6. 查找除大小写字母开头的行

Linux ---- Shell编程之正则表达式_第16张图片

7.查找以.结尾的行

8.查找以w开头,以d结尾的行

4、查找连续字符范围 "{}"

使用“{}”字符时,需要利用转义字符“\”,将“{}”字符转换成普通字符。

 1.查询2个o的字符

Linux ---- Shell编程之正则表达式_第17张图片

2.查询两个字母之间包含多个字符串的行

Linux ---- Shell编程之正则表达式_第18张图片

你可能感兴趣的:(正则表达式)