Shell编程之正则表达式之grep

目录

一、正则表达式

1、正则表达式概述

2、基础正则表达式

3、扩展正则表达式

二、grep命令

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

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

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

 4、过滤出IP地址

三、元字符操作案例

1、查找特定字

 2、查找特定集合字符

3、查找以w开头,以d结尾的行

​4、查找连续字符范围“{}”


在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

一、正则表达式

1、正则表达式概述

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

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

  • 基础正则表达式:BRE
  • 扩展正则表达式:ERE
文本处理工具基础正则表达式扩展正则表达式
vi编辑器支持\
grep支持\
egrep支持支持
sed支持\
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]1{2,\}表示两位及两位以上数字

\n,m\ }

匹配前面的子表达式n到m次,如:[a-z]{2,3\}匹配两到三位的小写字母

注意 egrep, 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,将匹配至少一个o

    ?

    匹配前面子表达式0次或者1次,如: go?d,将匹配gd或god

    ()

    将括号中的字符串作为一个整体,如: g(oo)+d,将匹配。整体1次以上,如good,gooood等

    |

    以或的方式匹配字条串,如:good l great,将匹配 good或考sgU@风雪一更ing

    定位符

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

    非打印字符

    \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 只打印匹配的文本行的次数,不显示文本内容。

     

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

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

     

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

     

     4、过滤出IP地址

     

    三、元字符操作案例

    1、查找特定字符

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

     2、查找特定集合字符

    2.1 查找既有i又有o的特殊字

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

  •  

    2.2 查找单个重复字符

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

  • 2.3查找o前面不是大小写字母开头的行

     2.4查找包含数字的行

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

 2.6查找以.结尾的行

3、查找以w开头,以d结尾的行

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

4.1 查询2个o的字符

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值