千家信息网

grep与正则达式

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,grep是一个行编辑器,它的默认动作是搜索与给定模式匹配的行显示到屏幕上来。它的变种程序包括egrep和fgrep。正则表达式是用户定义的、Linux工具用来过滤文本的模式模板。正则表达式利用元字符来
千家信息网最后更新 2025年01月23日grep与正则达式

grep是一个行编辑器,它的默认动作是搜索与给定模式匹配的行显示到屏幕上来。它的变种程序包括egrep和fgrep。

正则表达式是用户定义的、Linux工具用来过滤文本的模式模板。正则表达式利用元字符来表示数据流中的一个或多个字符。

正则表达式(Regual Expression,REGEXP)包括BRE和ERE两种,BRE就是基本正则表达式,而ERE是扩展正则表达式。

grep使用的元字符是BRE,egrep使用的元字符是ERE,而fgrep不使用元字符。而这三个命令可以使用不同的选项进行互通。接下来,我们来看看grep的用法。


一、grep

1. 格式

grep [options] PATTERN [FILE...]

2. 选项

-o:只显示匹配的行中与PATTERN相匹配的部分。

-i: 忽略PATTERN和输入文件中大小写的区别

-v:反选,只显示没有被PATTERN匹配到的行

-q:静默模式,找到匹配的内容,则命令的执行状态返回值为0,否则为非0。

-A NUM:打印紧随匹配的行之后的下文NUM行。

-B NUM: 打印紧随匹配的行之前的上文NUM行。

-C NUM: 打印匹配出来的行的上下文各NUM行。


二、基本正则表达式

类型

元字符

解释

字符匹配

.

匹配任意单个字符


[]

匹配指定范围内的任意单个字符


[^]

匹配指定范围外的单个字符




匹配次数

*

匹配其前的字符任意次,0次,1次或者多次


.*

匹配任意长度的任意字符


\?

匹配其前的字符0次或者1次,即其前面的字符可有可元


\+

匹配其前的字符1次或者多次,即其前面的字符至少出现1次


\{m\}

匹配其前的字符m次,精确匹配


\{m,n\}

匹配其前的字符至少m次,至多n次


\{0,n\}

匹配其前的字符最多n次


\{m,\}

匹配其前的字符最少m次

位置锚定

^

锚定行首,写在模式的最左侧,指定的字符串只能出现在行首


$

锚定行尾,写在模式的最右侧


^PATTERN$

用PATTERN来匹配整行


^$

表示空行,连空格都不能包含,不包括任意字符


^[[:spaces:]]*

表示空行或者包括空白字符的行


\

锚定词首


\bPATTERN

锚定词首


PATTERN\>

锚定词尾


\\

精确锚定单词




分组及引用

\(PATTERN\)

将一个或者多个字符捆绑在一起,当作一个整体进行处理;

分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:

\1: 模式从左侧起,第一个左括号以及与之匹配到的右括号之间的字符

\2:模式从左侧起,第二个左括号以及与之匹配到的右括号之间的字符


三、扩展正则表达式


类型

元字符

解释

字符匹配

.

匹配任意单个字符


[]

匹配指定范围内的任意单个字符


[^]

匹配指定范围外的单个字符




匹配次数

*

匹配其前的字符任意次,0次,1次或者多次


.*

匹配任意长度的任意字符


?

匹配其前的字符0次或者1次,即其前面的字符可有可元


+

匹配其前的字符1次或者多次,即其前面的字符至少出现1次


{m}

匹配其前的字符m次,精确匹配


{m,n}

匹配其前的字符至少m次,至多n次


{0,n}

匹配其前的字符最多n次


{m,}

匹配其前的字符最少m次

位置锚定

^

锚定行首,写在模式的最左侧,指定的字符串只能出现在行首


$

锚定行尾,写在模式的最右侧


^PATTERN$

用PATTERN来匹配整行


^$

表示空行,连空格都不能包含,不包括任意字符


^[[:spaces:]]*

表示空行或者包括空白字符的行


\

锚定词首


\bPATTERN

锚定词首


PATTERN\>

锚定词尾


\\

精确锚定单词

 或

  |

或,以|为分隔,表示或者为|左边,或者为|右边

C|cat表示C或者cat

分组及引用

(PATTERN)

将一个或者多个字符捆绑在一起,当作一个整体进行处理;

分组括号中的模式匹配到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:

\1: 模式从左侧起,第一个左括号以及与之匹配到的右括号之间的字符

\2:模式从左侧起,第二个左括号以及与之匹配到的右括号之间的字符


四、 BRE和ERE的区别: 从上面的两个表可以看出基本正则表达式和扩展正则表达式的区别,那就是扩展正则表达式在进行次数匹配和分组时的元字符不再需要\进行转义;另外扩展正则表达式多了一个或的元字符。



五、 练习:前面提到了这么多,一起来练习下吧。

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

# grep -i '^s' /proc/meminfo

# grep '^[Ss]' /proc/meminfo

# grep -E '^(S|s)' /proc/meminfo


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

# grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f


3、显示/etc/passwd文件中其默认shell为/bin/bash的用户; 进一步:仅显示上述结果中其ID号最大的用户;

# grep "/bin/bash$" /etc/passwd | sort -t: -k3 -n | tail -1 | cut -d: -f1,7


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

# grep "\<[0-9][0-9]\?\>" /etc/passwd

# grep "\<[0-9]\{1,2\}\>" /etc/passwd


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

# grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf


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

# grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit


7、找出netstat -tan命令执行结果中以'LISTEN'结尾的行;

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


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

# grep "^\([[:alnum:]]\{1,\}\):.*\1$" /etc/passwd


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

He like his lover.

He love his lover.

He like his liker.

He love his liker.

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

[root@liuqing tmp]# grep "\(l..e\).*\1" love.txt

10. 显示ifconfig命令输出结果中的IP地址。

~]# ifconfig | grep -E -o "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>(.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>){3}"



六、三个命令的互换

grep -E表示使用扩展正则表达式(egrep), -F表示将模式视为一个固定的字符串(fgrep)

egrep -G表示使用基本正则表达式(grep), -F表示将模式视为一个固定的字符串(fgrep)

fgrep -E表示使用扩展正则表达式(egrep), -G表示使用基本正则表达式(grep)

字符 正则 表达式 模式 括号 元字符 文件 用户 单个 命令 空白 分组 精确 之间 内容 单词 变量 字符串 空行 范围 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州大蕃鼠网络技术直播 冯埔吴文峻软件开发环境 梦幻西游服务器和梦三国 sql服务器要钱吗 数据库设计的几个主要阶段 折叠纸盒结构设计软件开发 打开浏览器代理服务器拒绝连接 服务器安全狗安装完上不去网 数据库表 语句怎么写 惠州市单片机软件开发公司 钢铁行业数据库审计技术原理 台州软件开发厂家 在软件开发中js是什么意思 国外知名的期刊数据库 黄浦区市场软件开发销售 计算机网络技术培训大纲 服务器搭建步骤 教育网络安全自查报告 私人承包软件开发 网络技术应用的看法 爱如生古籍数据库如何使用 关于国家网络安全的感悟 网络安全法第一章第8条 工业软件开发大学 网络安全法第二十二条第三 无法打开默认数据库失败 世界争霸服务器开放时间 简述数据库的著作权和保护 数据库返回数据有哪些异常 网络安全有哪些小学生
0