浅看grep的用法

 grep简介

grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix的grep家族包 括grep、egrepfgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能 更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。

grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

2. grep正则表达式元字符集(基本集)

^

锚定行的开始 如:\‘^grep\‘匹配所有以grep开头的行。

$

锚定行的结束 如:\‘grep$\‘匹配所有以grep结尾的行。

匹配一个非换行符的字符 如:\‘gr.p\‘匹配gr后接一个任意字符,然后是p。

*

匹配零个或多个先前字符 如:\‘*grep\‘匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。

[]

匹配一个指定范围内的字符,如\‘[Gg]rep\‘匹配Grep和grep。

[^]

匹配一个不在指定范围内的字符,如:\‘[^A-FH-Z]rep\‘匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。

(..)

标记匹配字符,如\‘(love)\‘,love被标记为1。

<

锚定单词的开始,如:\‘

>

锚定单词的结束,如\‘grep>\‘匹配包含以grep结尾的单词的行。

x{m}

重复字符x,m次,如:\‘0{5}\‘匹配包含5个o的行。

x{m,}

重复字符x,至少m次,如:\‘o{5,}\‘匹配至少有5个o的行。

x{m,n}

重复字符x,至少m次,不多于n次,如:\‘o{5,10}\‘匹配5--10个o的行。

w

匹配文字和数字字符,也就是[A-Za-z0-9],如:\‘Gw*p\‘匹配以G后跟零个或多个文字或数字字符,然后是p。

W

w的反置形式,匹配一个或多个非单词字符,如点号句号等。

b

单词锁定符,如: \‘bgrepb\‘只匹配grep。

3. 用于egrep和 grep -E的元字符扩展集

+

匹配一个或多个先前的字符。如:\‘[a-z]+able\‘,匹配一个或多个小写字母后跟able的串,如loveable,enable,disable等。

?

匹配零个或多个先前的字符。如:\‘gr?p\‘匹配gr后跟一个或没有字符,然后是p的行。

a|b|c

匹配a或b或c。如:grep|sed匹配grep或sed

()

分组符号,如:love(able|rs)ov+匹配loveable或lovers,匹配一个或多个ov。

x{m},x{m,},x{m,n}

作用同x{m},x{m,},x{m,n}

4. POSIX字符类

为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是A-Za-z0-9的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。

[:alnum:]

文字数字字符

[:alpha:]

文字字符

[:digit:]

数字字符

[:graph:]

非空字符(非空格、控制字符)

[:lower:]

小写字符

[:cntrl:]

控制字符

[:print:]

非空字符(包括空格)

[:punct:]

标点符号

[:space:]

所有空白字符(新行,空格,制表符)

[:upper:]

大写字符

[:xdigit:]

十六进制数字(0-9,a-f,A-F)

5. Grep命令选项

-?

同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。

-b,--byte-offset

打印匹配行前面打印该行所在的块号码。

-c,--count

只打印匹配的行数,不显示匹配的内容。

-f File,--file=File

从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。

-h,--no-filename

当搜索多个文件时,不显示匹配文件名前缀。

-i,--ignore-case

忽略大小写差别。

-q,--quiet

取消显示,只返回退出状态。0则表示找到了匹配的行。

-l,--files-with-matches

打印匹配模板的文件清单。

-L,--files-without-match

打印不匹配模板的文件清单。

-n,--line-number

在匹配的行前面打印行号。

-s,--silent

不显示关于不存在或者无法读取文件的错误信息。

-v,--revert-match

反检索,只显示不匹配的行。

-w,--word-regexp

如果被<和>引用,就把表达式做为一个单词搜索。

-V,--version

显示软件版本信息。

6. 实例

要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。

$ ls -l | grep \‘^a\‘

通过管道过滤ls -l输出的内容,只显示以a开头的行。

$ grep \‘test\‘ d*

显示所有以d开头的文件中包含test的行。

$ grep \‘test\‘ aa bb cc

显示在aa,bb,cc文件中匹配test的行。

$ grep \‘[a-z]{5}\‘ aa

显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

$ grep \‘w(es)t.*1\‘ aa

如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(1),找到就显示该行。如果用egrep或grep -E,就不用""号进行转义,直接写成\‘w(es)t.*1\‘就可以了。

时间: 2024-10-23 21:52:15

浅看grep的用法的相关文章

grep过滤用法介绍(一)

grep过滤用法介绍(一) grep主要作用是过滤出指定的行,指定的行满足什么条件,满足的条件我们就可以用一个正则表达式来表示.为了方便下面的实验进行,我们先进行cp /etc/passwd  1.txt 例如:#grep 'root'1.txt,截图如下: 匹配过滤出,有root的行! grep有一个选项很好用: 1.grep --color 'root' 1.txt 标注红色.为了方便使用,我们做一个别名操作,alias cgrep='grep --color'[删除用unalias+别名]

grep过滤用法介绍(二)

grep过滤用法介绍(二) 背景:(1)alias cgrep='grep --color' (2)cp /etc/passwd  1.txt 1. cgrep -n 'root' 1.txt 包含root所在,行数. 2. cgrep -v 'nologin' 1.txt 不包含nologin. 3. cgrep '[0-9]' 1.txt 包含所有0-9中间数字包含任意一个的行. 4. cgrep '[a-zA-Z]' 1.txt 过滤所有字母. 5.cgrep '^[a-z]' 1.txt

浅谈grep和正则表达式的亲密接触

一.grep简述 grep是Linux中针对纯文本中的内容按照某一种搜索条件进行匹配并显示的命令.说的白话一些,就是按照用户给出的筛选模式,对文本中的内容进行匹配并予以显示. grep的用法格式: grep [OPTIONS] PATTERN [FILE] 其中,OPTIONS表示命令可用的参数:PATTERN表示搜索条件,这里我们会结合正则表达式用:FILE则表示要操作的文本对象. 二.grep常用参数分析 比如,我们要搜索/etc/passwd下包含有"mail"字符串的行,结果如

shell脚本学习笔记之grep命令用法

***grep基本用法 grep [选项] [模式] [文件..] 选项 -c 只输出匹配行的数量 -i 搜索时忽略大小写 -h 查询多文件时不显示文件名 -l 只搜索匹配的文件名,而不列出具体的匹配行 -n 列出所有的匹配行,并显示行号 -s 不显示不存在或无匹配文本的错误信息 -v 显示不包含匹配文本的所有行 -w 匹配整词 -x 匹配整行 -r 递归搜索,不仅所属当前工作目录,而且搜索子目录 -q 禁止储存任何结果,以推迟状态表示所属是否成功 -b 打印匹配行距文件的头部的偏移量,以字节为

grep过滤用法介绍(三)

grep过滤用法介绍(三) egrep是grep的扩展形式,grep能用的,egrep都能用 grep --color 'r\?o' 1.txt egrep --color 'r?o' 1.txt 这两式子相等,也就是说?或者+这样的特殊符号在egrep这里不需要脱义!,截图如下: grep -E==egrep egrep用法小结: 1. egrep --color 'root|nologin' 1.txt #head -n3 1.txt |egrep --color -n 'root|nolo

grep egrep 用法以及其相应的正则表达式

grep egrep 用法以及其相应的正则表达式 一.grep.egrep命令 本文中主要介绍了linux系统下grep egrep fgrep命令和正则表达式的基本参数和使用格式.方法. 1.grep的定义: grep(global search regular RE ) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它只能使用基本的正则表达式来搜索文本,并把匹配的行打印出来. grep是很常见也很常用的命令,它的主要功能是进行字符串

grep 的用法

grep的用法 首先创建我们练习grep命令时需要用到的demo文件demo_file. $ cat demo_file THIS LINE IS THE 1ST UPPER CASE LINE IN THIS FILE. this line is the 1st lower case line in this file. This Line Has All Its First Character Of The Word With Upper Case. Two lines above this

浅谈intval()函数用法

1 <?php 2 $sql=mysql_query("select count(*) as total from tb_leaveword ",$conn); 3 $infos=mysql_fetch_array($sql); 4 $total=$infos['total']; //获取总留言条数 5 if($total==0){ //如果总留言条数为0,则给出提示 6 echo "<div align=center>对不起,暂无留言!</div&g

grep的用法

1.grep家族 grep: Global search Regular Expression(RE) and Print out the linegrep家族包括grep.egrep和fgrep,egrep和fgrep和grep只有很小的不同.egrep是grep的扩展,支持更多的元字符,等效于grep -E.fgrep是fixed grep, 或fast grep,它不识别任何正则表达式,所有的字符都表示它自己,等效于grep -F. 2.grep支持的元字符集 支持正则表达式基本元字符集和