博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
grep工具
阅读量:5826 次
发布时间:2019-06-18

本文共 2528 字,大约阅读时间需要 8 分钟。

hot3.png

正则

正则是一串有规律的字符串, 在计算机科学中,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。在很多文本编辑器或其他工具里,正则表达式通常被用来检索和/或替换那些符合某个模式的文本内容。许多程序设计语言都支持利用正则表达式进行字符串操作。

正则表达式的基础

在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。如:正则表达式"test"中没有包含任何元字符,它可以匹配"test"和"007test007"等字符串,但是不能匹配"Test"。

 

要想真正的用好正则表达式,需要正确的理解元字符。

元字符

Ø  . :匹配任何单个字符。例如正则表达式 r.t 匹配这些字符串:rat、rut、r t,但是不匹配root。

Ø  $ :匹配行结束符。例如正则表达式 weasel$ 能够匹配字符串"He's a weasel"的末尾,但是不能匹配字符串"They are a bunch of weasels."。

Ø  ^ :匹配一行的开始。例如正则表达式 ^When in 能够匹配字符串"When in the course of human events"的开始,但是不能匹配"What and When in the"。

Ø  *:匹配0个或多个正好在它之前的那个字符。如,正则表达式 .* 意味着能够匹配任意数量的任何字符(代表所有内容)。

Ø  " \ ":脱义符,使这里列出的这些元字符以普通的字符的身份来进行匹配。如,\ . 是匹配点字符,而不是以通配符的身份出现。

Ø  [ ]:匹配括号中的任何一个字符。如,正则表达式 r[aeo]d 匹配rad,red,rod。也可以指定区间 [0-9a-zA-Z],即代表所有非特殊字符!

Ø  \ <,\ >:匹配词(word)的开始(\ <)和结束(\ >)。例如正则表达式 \ < the 能够匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。 注意: 这个元字符不是所有的软件都支持的。

Ø  |:将两个匹配条件进行逻辑“或”(Or)运算。 注意: 这个元字符不是所有的软件都支持的。

Ø  +:匹配1或多个正好在它之前的那个字符。注意: 这个元字符不是所有的软件都支持的。

Ø  ?:匹配0或1个正好在它之前的那个字符。注意: 这个元字符不是所有的软件都支持的。

Ø  \ {i\ }\ {i,j\ }: 匹配指定数目的字符,这些字符是在它之前的表达式定义的。例如正则表达式A[0-9]\ {3\ } 能够匹配字符"A"后面跟着正好3个数字字符的串,例如A123、A348等,但是不匹配A1234。而正则表达式[0-9]\ {4,6\ } 匹配连续的任意4个、5个或者6个数字字符。注意: 这个元字符不是所有的软件都支持的。

grep

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

语法: grep [options] ‘Word’ filename

Options:
-c:=count 打印符合要求的行数
-i:=ignore-case 不区分大小写
-n:=line-number 在输出符合要求的行的同时连同行号一起输出
-v:=revert-match 打印不符合要求的行(取反)
-r,-R:=recursive(递归的,循环的)读取目录下的所有文件,包括子目录
-A:后面跟数字(有无空格都可以),过滤出复合要求的行以及下面n行, 例如 –A2则表示打印符合要求的行以及下面两行
-B:同上,过滤出符合要求的行以及上面n行

-C:同上,同时过滤出符合要求的行以及上下各n行

-E:‘grep -E’ = egrep

过滤一个字符串

231232_Y4cY_3706800.png

在Linux中,grep默认带color选项:

231246_Oo1U_3706800.png

grep -c

231300_AWRb_3706800.png

grep -n

231314_R770_3706800.png

grep -i

231326_NLbS_3706800.png

grep -v

231337_BbVN_3706800.png

grep -r/R

231351_CL0c_3706800.png

grep -A

231401_axDJ_3706800.png

grep -B

231415_GinL_3706800.png

grep -C

231426_0XLH_3706800.png

grep应用

grep -n '[0-9]'

231534_HaGt_3706800.png

231539_oCoF_3706800.png

grep -nv '[0-9]'

231549_vyrm_3706800.png

grep -n ' ^# ' 过滤以#开头的行(^在此表示以某字符开头)

231603_7IuF_3706800.png

grep '[^0-9]' 表示非0-9中任意字符所在的行,即任意非数字所在的行(只要包含非数字字符都算在内,中括号内的‘^’表示否定)

231617_UEv7_3706800.png

231623_NJbH_3706800.png

grep '^[^0-9]' 表示以非数字字符开头的行

231636_fer0_3706800.png

231643_QJRJ_3706800.png

grep 'r.o' 在此‘.’表示一个任意字符

231656_iJHd_3706800.png

231702_48t6_3706800.png

grep 'o*o' 在此‘ * ’表示其左边的字符重复n次(n≥0),后面结尾,o=0 ,*=0,001

231719_7VWC_3706800.png

231724_2GII_3706800.png

231730_T7cw_3706800.png

grep '.*' 在此' . * '组合表示所有任意字符

231742_pyKl_3706800.png

231748_nla6_3706800.png

grep 'o\ {2\ }' 在此{}表示前面字符或字符串出现的次数(也可以是一个区间,如'o\ {0,3\ }'表示0个到3个o)

231800_4nc9_3706800.png

231806_JJ7q_3706800.png

egrep应用

egrep 'o{2}'=grep -E 'o {2}' = grep 'o\ {2\ }'

231904_kOwz_3706800.png

231910_GdlP_3706800.png

egrep -n 'o+o' 在此‘+’表示其左边的字符重复n次(n≥1,注意和*的区别)

231923_UCjQ_3706800.png

231928_Warg_3706800.png

231933_Ruhl_3706800.png

egrep -n 'o?t' 在此?表示其前面的字符出现0次或1次

231945_fEzv_3706800.png

231950_2yas_3706800.png

egrep -n 'root|nologin' 在此‘|’表示或者

232003_gNwS_3706800.png

grep -nE '(oo){2}' 在此()内的内容表示一个字符组合,即连续出现两次‘oo’=‘oooo’字符串

232019_RYV0_3706800.png

232024_zK3n_3706800.png

转载于:https://my.oschina.net/u/3706800/blog/1576380

你可能感兴趣的文章
jboss5配置文件路径
查看>>
centos 6.2安装bind 9.8.2 master、slave与自动修改后更新
查看>>
系统监控工具----Inotify-Tools
查看>>
【翻译】Ext JS最新技巧——2014-5-12
查看>>
syslog-ng学习心得
查看>>
读书笔记-娱乐至死
查看>>
C++中STRING转为INT (转)
查看>>
ASP.NET上传多个文件
查看>>
学习:UTF-8和GBK的区别
查看>>
Shape parameter 形状参数
查看>>
【求助】小系统组成大系统所遇到的问题
查看>>
js 中英文字符串长度
查看>>
ERP/MIS系统中集成命令行式的功能调用
查看>>
一起谈.NET技术,详解ADO.NET连接池
查看>>
让xp系统(win2003系统)支持搜索文件内容
查看>>
Audactiy 和 Sox
查看>>
利用Ajax实现长连接(模拟推送,半长连接)
查看>>
mysql之set、enum的认识
查看>>
Java-Properties类的使用
查看>>
HBase性能优化方法总结(一):表的设计
查看>>