Lesson36 Shell的文本处理正则表达式(grep——文本处理命令)

文章目录

  • 1. 什么是grep搜索命令
  • 2. 什么是grep -E 扩展搜索命令
  • 3. grep中的正则表达式
  • 4. grep中字符的匹配位置设定


1. 什么是grep搜索命令
grep是一个强大的搜索工具
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,
它能使用正则表达式搜索文本,由正则表达式或者字符及基本文本字符所编写的过滤条件,并把匹配的行打印出来。
用于过滤/搜索的特定字符。可使用正则表达式能多种命令配合使用,在使用上十分灵活
2. 什么是grep -E 扩展搜索命令

grep 正则表达式与扩展正则表达式
grep -E “[1-9]+” = egrep “[1-9]+”

正规的grep 不支持扩展的正则表达式,竖线是用来表达“或”的扩展正则表达式元字符,正规的 grep无法识别,加上反斜杠,这个字符就被翻译成扩展正则表达式,就像egrep 和grep -E一样
3. grep中的正则表达式

grep的格式:

grep 匹配条件 处理文件 该实验我们用desktop来完成

首先复制一份/etc/passwd到当前目录,ls 可以看到,在当前路径中,passwd文件已经存在

shell中grep分割字符串_搜索


编辑passwd文件

shell中grep分割字符串_正则表达式_02


由于passwd文件内容太多,我们实际上用不了这么多的字符,因此将内容删掉一部分,再加上后三行内容,如下图所示

shell中grep分割字符串_搜索_03


这样我们就将待匹配的字符文件准备好了

从passwd文件中过滤出含有root关键字的行

shell中grep分割字符串_正则表达式_04


从passwd文件中扩展过滤出含有“root”和“ROOT”的行

shell中grep分割字符串_不区分大小写_05


不区分大小写从passwd文件中扩展过滤出含有root关键字的行

shell中grep分割字符串_shell中grep分割字符串_06


从passwd文件中不区分大小写过滤出以“root”关键字为开头和结尾的行

shell中grep分割字符串_搜索_07


-v表示除了,第二条命令的意思是,从passwd文件中不区分大小写过滤出root关键字在中间的行

shell中grep分割字符串_shell中grep分割字符串_08


-n表示显示行号

从passwd文件中不区分大小写过滤出以root关键字开头或结尾的行,并且显示行号

shell中grep分割字符串_shell中grep分割字符串_09


-n2表示输出关键字以及前后两行

从passwd文件中过滤出ROOT关键字的行并且显示其前后两行(后边只显示了一行是因为第36行以后没有内容)

shell中grep分割字符串_不区分大小写_10


同样,-n1表示输出关键字以及前后1行

shell中grep分割字符串_shell中grep分割字符串_11

grep中的正则表达式

字符

说明

^xy

以xy开头

xy$

以xy结尾

‘x…y’

xy中间有4个字符

‘x…’

x后边有4个字符

‘…y’

y前边有4个字符

4. grep中字符的匹配位置设定

shell中grep分割字符串_shell中grep分割字符串_12

grep中字符的匹配位置设定

位置

说明

^关键字

以关键字为开头

关键字$

以关键字为结尾

\ <关键字

以关键字为开头并且关键字前边没有任何字符

关键字\>

以关键字为结尾并且关键字后边没有任何字符

\< 关键字\>

关键字前后都没有任何字符

编辑westos文件

shell中grep分割字符串_shell中grep分割字符串_13


写入以下内容

shell中grep分割字符串_正则表达式_14


匹配xy中0-任意个字符

shell中grep分割字符串_正则表达式_15


匹配x和y中只能有一个字符

shell中grep分割字符串_搜索_16


过滤出x和y中只能有3个字符

shell中grep分割字符串_shell中grep分割字符串_17


修改westos文件内容

shell中grep分割字符串_shell中grep分割字符串_13


写入的内容如下图

shell中grep分割字符串_正则表达式_19


过滤x出现0-任意次y出现1个

shell中grep分割字符串_搜索_20


过滤x字符出现0到1次y出现1个

shell中grep分割字符串_不区分大小写_21


修改westos文件内容

shell中grep分割字符串_shell中grep分割字符串_13

shell中grep分割字符串_shell中grep分割字符串_23


过滤x出现1到任意次y出现1个

shell中grep分割字符串_不区分大小写_24


过滤x一个y出现1个

shell中grep分割字符串_搜索_25


过滤x一个y出现1个

shell中grep分割字符串_不区分大小写_26


过滤x在开头出现一个,y出现1次

shell中grep分割字符串_搜索_27


过滤x出现在开头,y出现在结尾(避免贪婪模式)

shell中grep分割字符串_搜索_28


过滤x出现1到任意次,y出现一次

shell中grep分割字符串_正则表达式_29


过滤xy这个整体出现2次以上

shell中grep分割字符串_正则表达式_30