Linux grep命令用法以及正则表达式

1.grep命令和正则表达式的简介

(1).grep(Global search REgular expression and Print out the line),即全局搜索正则表达式并打印出匹配的行,它是Linux系统中一个强大的文本搜索工具,它根据用户指定的“模式(pattern)”对目标文本进行过滤,显示被模式匹配到的行;

(2).正则表达式是由一类字符书写的模式,其中有些字符不表示符的字面意义,而是表示控制或通配的功能

2.grep命令的基本语法格式

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

grep的常用选项:

-v : 对匹配的行进行取反

-o : 仅显示匹配到的内容

-i : 忽略字符大小写

-n : 为匹配的行加上行号

-E : 使用扩展正则表达式 ,等同于egrep命令

-F : 不使用正则表达式搜索,等同于fgrep命令

-A # : 连同匹配行的下#行一并显示,#代表任意数字

-B # : 连同匹配行的上#行一并显示,#代表任意数字

-C # : 连同匹配行的上下#行一并显示,#代表任意数字

--color=auto : 对匹配的内容以不同的颜色显示

3.grep正则表达式的基本用法

基本正则表达式:

(1)字符匹配

. : 匹配任意单个字符

例:匹配以r开头,t结尾中间只隔了两个字符的行

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

常用的集合表示方法有:

纯数字:[[:digit:]]或[0-9]

小写字母:[[:lower:]]或[a-z]

大写字母:[[:upper:]]或[A-Z]

大小写字母:[[:alpha:]]或[a-zA-Z]

数字加字母:[[:alnum:]]或[0-9a-zA-Z]

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

标点符号:[[:punct:]]

例1:匹配包含数字0或2的行(截图只包含前半部分)

例2:匹配包含字母r或t的行(截图只包含前半部分)

例3:匹配包含数字0-9的行(截图只包含前半部分)

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

例:匹配包含除1-9范围之外的字符的行(截图只包含前半部分)

(2)次数匹配

* : 匹配其前面的字符出现任意次,0、1或多次的行

例:创建一个测试文本,包含有以下内容:

匹配x字母出现任意次的行:

\+ : 匹配其前面的字符出现1次或多次的行

例:匹配x字至少1次的行

\? : 匹配其前面的字符出现0次或1次的行

例:匹配x字母出现0次或1次的行

\{m\} : 匹配其前面的字符出现m次的行

例:匹配x字母出现2次的行

\{m,n\} : 匹配其前面的字符至少出现m次,至多出现n次的行,m和n表示一个范围m-n

例:匹配x字母至少出现1次,至多出现3次的行

(3)位置锚定

^ : 行首锚定

例:匹配x字母出现在在行首的行

$ : 行尾锚定

例:匹配e字母出现在行尾的行

^$ : 匹配空白行

例:匹配空白的行

\< : 词首锚定

例:精确匹配xy两个字母在一个单词的词首的行

\> : 词尾锚定

例:精确匹配xy两个字母在一个单词的词尾的行

\<\> : 匹配单词

例:匹配包含xy这个单词的行

(3)分组

\(\) : 对某字符串进行进行分组匹配

例:匹配xy单启出现0次或1次的行

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

对前面的分组进行引用的符号为:\1 , \2 ,\3

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

后向引用举例:

新建一个文本文件,假设有如下内容:

找出前后都有相同单词的行:

正则表达式元字符总结:

字符匹配:. ,[] ,[^]

次数匹配:* ,\? ,\+ ,\{m\} ,\{m,n\}

位置锚定:^ ,$ ,\< ,\> ,\<\>

分组匹配:\(\)

4.egrep及扩展正则表达式:

egrep相当于grep -E,egrep可以直接使用扩展正则表达式,而grep需要加上选项-E;

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

字符匹配:. ,[] ,[^]

次数匹配:*,?,+,{m},{m,n},{m,},{0,n}

位置锚定:^,$,\>,\<

分组匹配:(),支持后向引用

| : 匹配左侧或右侧符合条件的行,比如a|b,含有a或b的行都匹配;

例1:egrep 等同于 grep -E

例2:

5.grep练习题:

(1).显示/proc/meminfo文件中以大写或小写s开头的行;

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

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

# grep -v ‘/sbin/nologin$‘ /etc/passwd | cut -d: -f1

(3).显示/etc/passwd文件中其默认shell为/bin/bash的用户

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

# grep ‘/bin/bash$‘ /etc/passwd | cut -d: -f1 | sort -n -r | head -1

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

# grep ‘\<[[:digit:]]\{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相同的用户;

# 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‘ grep.txt

(10).显示当前系统上root、centos或user1用户的默认shell及用户名;

# grep -E ‘^(root|centos|user1\>)‘ /etc/passwd

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

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

(12).使用echo输出一个路径,而使用egrep取出其基名;

# echo /etc/rc.d/ | grep -o ‘[^/]\+/\?$‘ | grep -o ‘[^/]\+‘

时间: 2024-11-08 00:16:30

Linux grep命令用法以及正则表达式的相关文章

Linux grep 命令中的正则表达式详解

在 Linux .类 Unix 系统中我该如何使用 Grep 命令的正则表达式呢? Linux 附带有 GNU grep 命令工具,它支持扩展正则表达式(extended regular expressions),而且 GNU grep 在所有的 Linux 系统中都是默认有的.Grep 命令被用于搜索定位存储在您服务器或工作站上的任何信息. 正则表达式 正则表达式就是用于匹配每行输入的一种模式,模式是指一串字符序列.下面是范例: ^w1 w1|w2 [^ ] grep 正则表达式示例 在 /e

Linux Linux grep命令用法以及正则表达

一.grep命令和正则表达式的简介 1.grep(Global search REgular expression and Print out the line),即全局搜索正则表达式并打印出匹配的行,它是Linux系统中一个强大的文本搜索工具,它根据用户指定的"模式(pattern)"对目标文本进行过滤,显示被模式匹配到的行: 2.正则表达式是由一类字符书写的模式,其中有些字符不表示符的字面意义,而是表示控制或通配的功能 二.grep命令的基本语法格式 grep [OPTION]..

Linux grep命令用法详解

grep: Global search regular expression and print out the line.作用:文本搜索工具,根据用户指定的"模式(过滤条件)"对目标文件逐行进行匹配检查,打印匹配的行模式:由正则表达式的元字符及文本字符所编写出的过滤条件 grep [OPTIONS] PATTERN [FILE-] OPTIONS: --color=auto:对匹配到的文本着色后高亮显示 -i, --ignore-case:忽略字符的大小写 -o, --only-ma

linux grep命令详解

linux grep命令详解 http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856896.html grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来. Unix的grep家族包括grep.egrep和fgrep.egrep和fgrep的命令只跟gr

Linux grep命令详解[备份]

linux grep命令 1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户. 2.格式grep [options] 3.主要参数[options]主要参数:-c:只输出匹配行的计数.-I:不区分大 小写(只适用于单字符).-h:查询多文件时不显示文件名.-l:查询多文件时只输出包含匹配字符的文件名.-n:显示

Linux grep命令的一些使用体会

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

linux wget 命令用法详解(附实例说明)

Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的事务我们只能先从远程服务器下载到我们电脑磁盘,然后再用ftp工具上传到服务器.这样既浪费时间又浪费精力,那不没办法的事.而到了Linux VPS,它则可以直接下载到服务器而不用经过上传这一步.wget工具体积小但功能完善,它支持断点下载功能,同时支持FTP和HTTP下载方式,支持代理服务器和设置起来

Linux chmod命令用法

chmod----改变一个或多个文件的存取模式(mode) chmod [options] mode files 只能文件属主或特权用户才能使用该功能来改变文件存取模式.mode可以是数字形式或以who opcode permission形式表示.who是可选的,默认是a(所有用户).只能选择一个opcode(操作码).可指定多个mode,以逗号分开. options: -c,--changes 只输出被改变文件的信息 -f,--silent,--quiet 当chmod不能改变文件模式时,不通

linux sed命令中的正则表达式问号、加号、圆括号等需要转义

linux sed命令内的正则表达式语法分两种,一种叫Basic (BRE) Syntax,另一种叫Extended (ERE) Syntax.默认使用的是BRE. 这个BRE就是一个简化版,语法稍微有点不一样,问号.加号.圆括号.花括号和竖线没有特殊含义,就代表字符本身,如果要原本定义的实现特殊含义,需要用反斜杠(\)转义……详情请见: https://www.gnu.org/software/sed/manual/html_node/BRE-vs-ERE.html#BRE-vs-ERE