grep, egrep, 基本正则表达式及扩展表达式学习及用法

讲grep与egrep之前,我们先要知道grep与egrep是两种文本搜索工具。而文本搜索类工具就是根据用户指定的“模式(pattern)”对目标文本进行过滤,显示被模式匹配到的行。

正则表达式其定义:由一类字符书写的模式,其中有些字符不表示字符的字面意义,而是表示控制或通配的功能;(Global search REgular expression and Print out the line.)

正则表达式分类

基本正则表达式(grep)

扩展正则表达式(egrep)

正则表达式的语法如下:

grep [OPTION]... ‘PATTERN‘ FILE...

--color

基本正则表达式:

字符匹配:

.: 匹配任意单个字符:

例如:我先编辑一个a.txt文档,有如下内容:

He like his lover.

He love his lover.

He like his liker.

He love his liker.

下面可以自行在XSHELL中练习查找,不在举例

[]:匹配指定集合中的任意单个字符

[[:digit:]], [0-9]

[[:lower:]], [a-z]

[[:upper:]], [A-Z]

[[:alpha:]], [a-zA-Z]

[[:alnum:]], [0-9a-zA-Z]

[[:space:]],所有的空白字符

[[:punct:]],所有标点符号

[^]:匹配指定集合外的任意单个字符

匹配次数:用于对其前面紧邻的字符所能够出现的次数作出限定

*: 匹配其前面的字符任意次,0,1或多次;

例如:用grep搜索 ‘x*y‘,则会出现:xy, xxy, xxxy, y;xxxy出现说明表达式匹配的贪婪模式,能够尽量多的匹配

\?:匹配其前面的字符0次或1次;

例如:grep ‘x\?y‘

xy, xxy, y, xxxxxy, aby

\+: 匹配其前面的字符出现至少1次;

\{m\}: 匹配其前面的字符m次;

例如:grep ‘x\{2\}y‘

xy, xxy, y, xxxxxy, aby

\{m,n\}:匹配其前面的字符至少m次,至多n次;

例如: grep ‘x\{2,4\}y‘

xy, xxy, y, xxxxxxy, aby

grep ‘x\{0,4\}y‘

xy, xxy, y, xxxxxxxxxy, aby

grep ‘x\{2,\}y‘

xy, xxy, y, xxxxxy

.*: 匹配任意长度的任意字符

位置锚定:

^: 行首锚定

写在模式的最左侧[[]]

$: 行尾锚定

写在模式的最右侧

^$: 空白行

\<: 词首锚定, 或者\b

出现在要查找的单词模式的左侧;\<char

\>:词尾锚定, 或者\b

出现在要查找的单词模式的右侧;char\>

\<pattern\>: 匹配单词

分组:

\(\)

后向引用:模式中,如果使用\(\)实现了分组,在某行文本的检查中,如果\(\)的模式匹配到了某内容,此内容后面的模式中可以被引用;

\1, \2, \3

模式自左而右,引用第#个左括号以及与其匹配右括号之间的模式匹配到的内容;

grep选项:

-v: 反向选取

-o: 仅显示匹配到内容

-i: 忽略字符大小写

-E: 使用扩展正则表达式=egrep

-A #(数字): 匹配到的那行,加上,匹配行后面的第#行也都显示出来;选项加在要匹配内容前后都可以

-B #:匹配到的那行,加上,匹配行前面的第#行也都显示出来;选项加在要匹配内容前后都可以

-C #:匹配行上下#行显示出来;选项加在要匹配内容前后都可以

练习:

1、显示/proc/meminfo文件中以大写或小写S开头的行;

grep -i ‘^s‘ /proc/meminfo

2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;

grep  -v ‘/sbin/nologin$‘ /etc/passwd     /etc/passwd 有很多默认shell用户信息等,就是/sbin/nologin$ 类的用户在此目录中

3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;

进一步:仅显示上述结果中其ID号最大的用户;

grep ‘/bin/bash$‘ /etc/passwd | cut -d‘:‘ -f3 | sort -nr | head -1

或:grep ‘/bin/bash$‘ /etc/passwd | cut -d‘:‘ -f3 | sort -n | tail -1

4、找出/etc/passwd文件中的一位数或两位数;

egrep ‘\<([0-9]|[1-9][0-9])\>‘ /etc/passwd  ;之所以用egrep是因为grep中没有或字符的用法,而egrep中有 | 的用法

或:grep ‘\<\([0-9]\{1,2\}\)\>‘ /etc/passwd

5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行

grep ‘^[[:space:]]\+‘ /boot/grub/grub.conf

6、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

grep ‘^#[[:space:]]\+[^[:space:]]\+‘ /etc/rc.d/rc.sysinit

7、找出netstat -tan命令执行结果中以‘LISTEN‘(后可有空白字符)结尾的行;

netstat -tan | grep ‘LISTEN[[:space:]]*$‘

8、添加用户bash, testbash, basher, nologin(SHELL为/sbin/nologin),而找出当前系统上其用户名和默认shell相同的用户;

useradd -s /sbin/nologin bash  创建其他用户,把后面bash更改一下即可 : useradd(命令) -s(option) /sbin/nologin(option的argument) bash(argument)

解析步骤:id bash(刚添加的用户看是否创建成功)

cat /etc/passwd  ;先查看一下多少用户、ID、SHELL等信息

egrep ‘\<^([[:alnum:]]+)\>.*\1$‘ /etc/passwd

或grep ‘^\(\<[[:alnum:]]\+\>\).*\1$‘ /etc/passwd

9、扩展题:新建一个文本文件,假设有如下内容:

He like his lover.

He love his lover.

He like his liker.

He love his liker.

找出其中最后一个单词是由此前某单词加r构成的行。

grep ‘\(\<[[:alpha:]]\+\>\).*\1r‘ a.txt

egrep ‘(\<[[:alpha:]]+\>).*\1r‘ m.txt

egrep及扩展的正则表达式

扩展正则表达式的元字符:

字符匹配:

.

[]

[^] :不匹配

匹配次数限定:

*

?: 匹配其前面字符0次或1次;

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

{m}:匹配其前面的字符m次;

{m,n}:{m,}, {0,n}

锚定:

^

$

\<, \>: \b

分组:

()

支持后向引用:\1, \2, ...

或者:

a|b: a或者b

ab|cd:ab或者cd

grep -E ‘pattern‘ file...

或者:egrep ‘pattern‘ file...

练习10:显示当前系统上root、centos或user1用户的默认shell及用户名;

egrep ‘^(root|centos|user1)‘ /etc/passwd | cut -d: -f1,7

若用户没有,创建用户 useradd 用户名;如果加错用户名,修改,usermod 正确用户名 错误用户名

练习11:找出/etc/rc.d/init.d/functions文件中某单词后面跟一对小括号"()"的行;

grep ‘\<[[:alpha:]]\+\>()‘ /etc/rc.d/init.d/functions

或egrep ‘\<[[:alpha:]]+\>\(\)‘ /etc/rc.d/init.d/functions ; egrep中\(转译符号不需要添加,\<,\>除外,所以egrep中的()就等于grep中的\(\),所以想在egrep中表达(),得转译,\+与+同理)

若想切掉后面的},则:egrep ‘\<[[:alpha:]]+\>\(\)‘ /etc/rc.d/init.d/functions | cut -d‘ ‘ -f1

练习12:使用echo输出一个路径,而使用egrep取出其基名;

[[email protected] ~]# echo /etc/passwd/ | egrep -o ‘\<[[:alpha:]]\>‘

[[email protected] ~]# echo /etc/passwd/ | egrep -o ‘\<[[:alpha:]]+\>/$‘

passwd/(红色/)

[[email protected] ~]# echo /etc/passwd/ | egrep -o ‘\<[^/]+\>/$‘ | egrep ‘\<[^/]+>‘

[[email protected] ~]# echo /etc/passwd/ | egrep -o ‘\<[^/]+\>/$‘ | egrep ‘\<[^/]+\>‘

passwd/ (白色/)

[[email protected] ~]# echo /etc/passwd/ | egrep -o ‘\<[^/]+\>/$‘ | egrep -o ‘\<[^/]+\>‘

passwd

练习13:找出ifconfig命令结果中的1-255之间的数值;

IP的范围:1.0.0.1 - 223.255.255.254

ifconfig | egrep -o ‘\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-1][0-9]|22[0-3])\>.\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>.\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>.\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>‘

解析:1-223.0-255.0-255.0-254去匹配,因为限定条件为1-255之间的数值,所以为1-223.1-255.1-255.1-254去匹配

或:ifconfig | egrep -o --color=auto ‘\<([1-9]|[1-9][0-9]|1[0-9]{2}|21[0-9]|22[0-3])\>\.(\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>\.){2}\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>‘

练习14:找出ifconfig命令结果中的IP地址;

ifconfig | egrep -o --color=auto ‘\<([1-9]|[1-9][0-9]|1[0-9]{2}|21[0-9]|22[0-3])\>\.(\<([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>\.){2}\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-4])\>‘

解析:因为IP地址的区间为1.0.0.1 - 223.255.255.254,所以按照1-223.0-255.0-255.1-254去匹配

时间: 2024-10-19 14:50:12

grep, egrep, 基本正则表达式及扩展表达式学习及用法的相关文章

grep, egrep, 基本正则表达式及扩展表达式;

什么是正则表达式? 正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号辅助,可以让用户轻易达到查找.删除.替换某特定字符串的处理程序. 正则表达式对Linux系统管理员工作有什么帮助? 通常情况下,由于系统在繁忙的情况下,每天产生的信息会多到你无法想象的地步,系统管理员需要每天去看很多的数据信息,从千百行的数据中找个出一行有问题的信息,难度太大! 这时,我们就可以通过正则表达式的功能,仅仅取出有问题的信息进行分析.如此,系统管理工作将会更加容易: g

grep的基本正则表达式及扩展表达式

grep 全名为 全面搜索正则表达式并把行打印出来(global search regular expression) grep搜索以 FILE 命名的文件输入 (或者是标准输入,如果没有指定文件名,或者给出的文件名是 - 的话),寻找含有与给定的模式 PATTERN(正则表达式) 相匹配的内容的行.默认情况下, grep 将把含有匹配内容的行打印出来. 另外,也可以使用两个变种程序 egrep 和 fgrep . Egrep 与 grep -E 相同. Fgrep 与 grep -F 相同 g

Linux正则表达式及扩展表达式、egrep命令的说明(8月27日作业练习)

1.总结本此课程中所涉及命令的使用方法及相关示例展示: 权限管理:           权限管理: chmod            所属关系管理: chown, chgrp            文件遮罩码:umask 修改文件权限:chmod          chmod [OPTION]... MODE[,MODE]... FILE...           chmod [OPTION]... OCTAL-MODE FILE...           chmod [OPTION]... -

linux正则表达式和扩展表达式

Centos的grep的正则表达式和扩展表达式 日期2015.08.28 备注:其简述来自于马哥课堂笔记  grep      grep是一个文本过滤工具根据用户指定的"模式(pattern)"逐行去搜索目标文本,打印匹配到的行:     模式:由正则表达式的元字符及文本字符所编写的过滤条件: 其中,元字符:字符不表示其字面意义,而用于表示通配或控制功能 grep分为两类 基本的正则表达式:BRE 扩展的正则表达式:ERE grep 使用格式 grep  [选项]   模式  [文件]

Linux 命令grep, egrep,正则表达式大全

Linux grep 命令     Linux系统中grep,egrep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. 1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本. 2.egrep : 扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本. 3.fgrep : 快速grep,这个版

grep , egrep 以及正则表达式

一.什么是正则表示法? 正则表达式:由一类字符书写的模式,其中有些字符不表示字符的字面意义,而是表示控制或通配的功能: 正则表达式分为两类:基本正则表达式和扩展正则表达式: ------------------------------------------------------ 注:本文以grep为例来讲解正则表达式. (1)基本正则表达式: 字符匹配: 字符: 字符说明: . 匹配任意单个字符 [] 匹配任意单个字符 [[:digit:]], [0-9] 所有数字 [[:lower:]],

linux下的grep,egrep及正则表达式

一, linux上常用的文本搜索工具,grep家族和正则表达式及介绍   linux上常用的文本搜索工具: grep(egrep,fgrep):文本搜索工具:基于"pattern"对给定文本进行搜索操作: sed:Stream EDitor,流编辑器,行编辑工具:文本编辑工具: awk:GNU awk,文本格式化工具:文本报告生成器: 正则表达式:由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意义,而是用于表示控制或通配的功能: 一般分为两类: 基本正则表达式:BRE 扩

grep,egrep 及正则表达式

Linux中一切皆文件:文本文件,对文本文件的搜索就非常的关键和常用. Linux文本搜索工具:grep ,egrep,fgrep,文本搜索指文本文件中内容的搜索. 文件名的搜索是linux中bash的特性,globbing,文件名通配,有点windows中的搜索相似,但功能跟强大.一般配合 ls 命令使用.可参考视频:bash基础特性(01) globbing:中的元字符: *:用来通配任意长度任意字符,?:用来匹配单个字符,[]:用于比配指定范围内的字符,[^]:用于取反范围内的字符. 总结

grep/egrep和正则表达式汇总

grep, egrep, fgrep 语法格式: grep [option] ... 'PATTERN' FILE --color=auto 对目标FILE进行搜索,显示能够匹配的行 正则表达式 基本正则: grep 扩展正则: grep -E 或者 egrep fgrep: fast但是不支持正则表达 基本正则表达式的元字符: 字符匹配: .  匹配任意单个字符 [] 匹配指定范围内的单个字符 [0-9], [[:digit:]] 单个数字 [a-z], [[:lower:]] 单个小写字符