正则表达式及grep、egrep等工具的使用

一、何为正则表达式

正则表达式是自定义的,linux文本工具(如grep,sed)用来过滤文本的模式模板,linux工具能够在数据流向工具时对数据进行正则表达式模式匹配,数据能匹配模式则会被接受进行下一步处理(如显示、删除、替代等)。正则表达式在shell和linux中的地位非常重要,透过正则表达式强大的字符串处理能力,我们可以从大量的数据中快速检索出仅符合需要的数据进行分析,由此给工作带来极大的便利

二、正则表达式的分类

正则表达式包括基本正则表达式(basic regular expression,简称BRE)和扩展正则表达式(ERE)两类,扩展正则表达式除了可以做简单的一组字串处理之外,还可以做群组的字串处理,如搜索china或america或england的搜索。大多数linux工具都至少符合基本正则表达式的规范。

三、正则表达式的语法

1、特殊字符

.:匹配任意单个字符

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

[:alnum:]:代表英文大小写字符及数字,即a-z,A-Z,0-9

[:alpha:]:代表英文大小写字符,即a-z,A-Z

[:upper:]:代表英文大写字符,即A-Z

[:lower:]:代表英文小写字符,即a-z

[:digit:]:代表数字,即0-9

[:space:]:代表空白字符

[^]:匹配指定范围之外的任意单个字符,如[^0-9]表示数字之外的任意单个字符

*:表示它前面的字符可以出现任意次

\?:表示它前面的字符可以出现1次或0次

\+:表示它前面的字符出现至少1次

\{m\}:表示它前面的字符要出现m次

\{m,n\}:表示它前面的字符出现至少m次,至多n次

\{m,\}:表示它前面的字符出现至少m次

\{0,n\}:表示它前面的字符出现至多n次

.*:表示任意长度的任意字符

2、位置锚定符

^:行首锚定,即要搜索的字串必须位于行首

$:行尾锚定

^$:空白行,同^[[:space:]]*$

\<:词首锚定(注:不包含特殊字符的连续字符组成的串叫“单词”)

\>:词尾锚定

3、分组和引用

\(\):分组,例如\(ab\)*表示ab可以出现任意次,分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用

注意:反斜线为转义字符

\#:引用第#个括号所匹配到的内容,而非模式本身。

例如 abcmnabc匹配\(ab\?c\).*\1,而abcmnac不匹配

4、扩展正则表达式的特殊说明

?:表示它前面的字符可以出现1次或0次(不同于基本正则表达式)

+:表示它前面的字符出现至少1次

{m}:精确匹配m次

{m,n}:至少m次,至多n次

{m,}:至少m次

{0,n}:至多n次

锚定符与基本正则表达式相同

分组:( )    引用:\#

或者:a|b,表示或者b。注意:conC|cat表示conC或者cat而非conCcat或者conccat

四、grep及egrep

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式对目标文件进行逐行搜索,并把匹配的行打印出来。egrep则是使用扩展正则表达式语法搜索文本的工具。

使用方法:grep [option]…… ‘PATTERN’FILE

常用选项:

-i:忽略字符大小写

-v:反向选取

-o:仅显示匹配的字串,而非字串所在的行

-q:静默

--color=auto:将搜索匹配到的字串标示颜色

-A#:after,除了显示匹配行之外,也显示匹配行的后#行

-B#:before,除了显示匹配行之外,也显示匹配行的前#行

-C#或-#:除了显示符合匹配到的行之外,也显示该行之前后的#行内容

-E:使用扩展正则表达式,相当于egrep

              -n:在显示符合范本样式的那一行之前,标示出该行的编号


五、grep使用示例

1、显示/etc/passwd文件中以bash结尾的行

[[email protected] ~]# grep "bash$" /etc/passwdroot:x:0:0:root:/root:/bin/bashwittgenstein:x:500:500:wittgenstein:/home/wittgenstein:/bin/bash

2、显示/etc/passwd文件中的两位数或三位数

[[email protected] ~]# grep -o "\<[1-9][[:digit:]]\{1,2\}\>" /etc/passwd121014111210013...

3、显示`netstat -tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行

[[email protected] ~]# netstat -tan | grep "LISTEN[[:space:]]*$"tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN ...

4、添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行

[[email protected] ~]# grep "^\([[:alnum:]]\+\):.*/\1$" /etc/passwdsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltbash:x:501:501::/home/bash:/bin/bashnologin:x:504:504::/home/nologin:/sbin/nologin

5、显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)

[[email protected] ~]# grep -E "^root:|^centos:|^user1:" /etc/passwd | cut -d: -f3,70:/bin/bash505:/bin/bash506:/bin/bash

6、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行

[[email protected] ~]# grep "\<[[:alnum:]]*_*[[:alnum:]]*\>()" /etc/rc.d/init.d/functions | grep "\<[^(]"checkpid() {__readlink() {__fgrep() {daemon() {killproc() {pidfileofproc() {pidofproc() {status() {echo_success() {...

7、使用echo输出一个路径,而后用egrep找出其路径基名;进一步使用egrep取出其目录名

[[email protected] ~]# echo "/etc/rc.d/init.d/nfs/" | egrep -o "\<nfs/$" | cut -d"/" -f1nfs[[email protected] ~]# echo "/etc/rc.d/init.d/nfs/" | egrep -o ".+d\>"/etc/rc.d/init.d

8、找出ifconfig命令执行结果中1-255之间的数字

[[email protected] ~]# ifconfig | grep -E -o "\<[1-9][0-9]?\>|\<1[0-9][0-9]\>|\<2[0-4][0-9]\>|\<25[0-5]\>"294035192...
时间: 2024-10-24 19:37:29

正则表达式及grep、egrep等工具的使用的相关文章

正则表达式与grep、sed工具使用简介

正则表达式与grep.sed工具使用简介 一.正则表达式     正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 其介绍如下:      \ 将下一个字符标记符.或一个向后引用.或一个八进制转义符 ^ 匹配输入字符串的开始位置 $ 匹配输入字符串的结束位置 * 匹配前面的子表达式任意次 + 匹配前面的子表达式一次或多次(大于等于1次) ? 匹配前

正则表达式和grep文本搜索工具

正则表达式和文本搜索工具介绍 正则表达式:如果想搜索/etc/passwd文件中以root开头的行,对与人来说很容易理解,但是对与计算机来说就无法理解,这个时候就需要使用正则表达式来表达过滤条件了,让用户实现对文本的智能搜索.正则表达式就是由元字符及正常字符所书写的模式,其中的元字符不表示字符本身的意义,而是用于表达控制或通配等功能. 正则表达式的特点是: 1. 灵活性.逻辑性和功能性非常的强: 2. 可以迅速地用极简单的方式达到字符串的复杂控制. grep:支持正则表达式,是一个文本搜索工具,

Shell编程之正则表达式三剑客——grep,egrep

正则表达式概述 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑. 基础正则表达式 正则表达式的字符串表达方法根据不同的严谨程度与功能分为基本正则表达式与扩展正则表达式.基础正则表达式是常用的正则表达式的最基础的部分.在 Linux 系统中常见的文件处理工具中 grep 与 sed 支持基础正则表达式,而 egrep 与 awk 支持扩展正则表达式.

第五期 shell 正则表达式(grep egrep sed awk)(第十一 十二讲)

一.grep/egrep 1. 语法+选项语法: grep  [-cinvABC]  'word'  filename (尽量用单引号) ---color 打印出来用红色显示 alias cgrep='grep --color' vim ./bashrc -c :打印符合要求的行数-n :在输出符合要求的行的同时连同行号一起输出 -v :打印不符合要求的行 -A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行 -B :后跟一个数字,例如 –B2 则表示打印符合要

正则表达式和grep、sed工具

what is 正则表达式 一种处理字符的方法,只要命令工具(例:grep.sed.awk等)支持这种方法,就可以用来处理正则表达式字符串.通过特殊字符的帮助,我们就容易达到查找.删除.替换特定字符串的命令程序. 用途 信息过滤,信息匹配,获取有用信息 常用的表达式含义 ^ 行首标记  #^haha,匹配以haha起始的行 $ 行尾标记 . 匹配任意单个字符 ? 匹配之前的项一次或0次  #blu?e 匹配blue或ble + 匹配之前的项一次或多次 * 匹配之前的项0次或多次 [] 匹配包含在

正则表达式及工具程序grep,egrep

写在前面: 如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. 什么是正则表达式?     见名知意,正则表达式也就是符合某种规则的表达式,它是由特殊字符和其他字符组成的字符串.要想以正则表达式的规则来处理字符串,就得需要使用支持正则表达式的工具程序(有时也被称为正则表达式引擎)才行,例如grep,egrep,vi,sed,awk等,用来从/boot/grub/grub.conf文件中提取结果的命令如下图所示. 基础正则表达式之工具程序grep     元

【Linux相识相知】文本处理工具之grep\egrep\fgrep及正则表达式

常说Linux上有文本处理的三剑客,grep.sed和awk,本文就grep做出详细的描述,并引出正则表达式. grep NAME:打印模式匹配的行 SYNOPISIS: grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...] 常用选项: --color=auto:对匹配到的文本着色后进行高亮显示,默认已被别名alias grep='grep --color=auto' -i:忽略字符的大小

文本处理工具与正则表达式、grep

一.文本处理工具 1.文本查看命令 cat [OPTION]- [FILE]- -n 显示行号 -b 空格行不加行号,有字符的行才加 -s  相邻的空行压缩为一行,长和-n联用 -v 处理windows中的^M -T 可以看到tab\space -A  显示所有控制符(包括windows文本中的^M,^T) -E  显示行结束符$ (回车) tac [OPTION]- [FILE]-  将每个指定文件按行倒置并写到标准输出. 效果与cat 相反 rev  将指定文件从最后一个字符开始显示到第一个

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

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