正则表达式及文本处理

正则表达式及文本处理

通俗点说,正则表达式就是处理字符串的方法,更加快速简洁的代表各个要求参数,一般用于描述字符排列和匹配模式的一种语法规则,通过正则表达式一些特殊符号的辅助,让用户轻易的查找、删除、替换一些字符串的处理程序。( ps:正则表达式和通配符不一样,通配符代表的是bash接口的一个功能,但正则表达式是一种字符串处理的表达方式,两者一定要分清楚。)


正则表示支持很多命令,例如:grep,sed.awk,vim,less,nginx,varnish等等命令,它分为两类:

1. 一种是基本正则表达式(BRE)

2. 一种是扩展正则表达式(ERE)

下面介绍下基本正则表达式的元字符,分字符又分四类:

1. 字符匹配

2. 匹配次数

3. 位置锚定

4. 分组

字符匹配

.  表示任意单个字符

例如:

[ ]   表示匹配范围内的任意单个字符([abc]r 相当于r一个个匹配里面的,如ar,br,cr)

例如:

[^ ]  表示匹配范围外的任意单个字符

[:alpha:]   任意一个字母(相当于a-zA-Z)

[:upper:]  任意一个大写字母(相当于A-Z)

[:lower:]  任意一个小写字母(相当于a-z)

[:digit:]   任意一个数字(相当于0-9)

[:space:]  水平和垂直的空白字符(比blank包含的更多)

[:blank:]   空白字符(空格和制表符)

[:punct:]  标点符号

[:alnum:]   任意字母和数字(相当于0-9a-zA-Z)

[:print:]   可打印字符

例如:字符的使用

(ps:用的时候记得加[],例如:[[:alnum:]]或者[0-9a-zA-Z]这样用,当然最好还是用[[:alnum:]]这种命令,它会比[a-z0-9A-Z]更为确定一些,在这里汉字也为字母)

匹配次数

*   表示*号前面的一个字符的0-N次(它有一个贪婪模式,会尽量匹配最长)

例如:

.*   表示任意多个长度的字符

\?    表示\?符号前的字符0-1次

例如:

\+     匹配\+前的字符至少1次

例如:

\{m,n}    表示\{m,n\}符号前的字符的m-n次

\{m\}     表示{m\}符号前的字符m次

\{n,\}     表示匹配前面字符至少n次

\{,n}      表示匹配前面字符最多n次

例如:

(ps: \的意义是转义字符,意思就是将一些有特殊符号的意义去除)

位置锚定

^ 之后接字符    表示^ 之后的字符出现在行首

例如:

$ 之前接字符    表示$之前的字符出现在行尾

例如:

\>      表示\> 符号之后的字符出现在单词的尾部

\<      表示\< 之前的字符出现在单词的首部

\<字符 \>      表示只有小于号和大于号之间的字符

例如:

(ps:\b 同样可以用于匹配单词位置,只不过有时候怕不好区别,最好还是用大于小于,这样也方便看清)。

分组

分组简单来说就是\(\)用一个命令将一个或者多个字符捆绑在一起,当成一个整体进行处理,如:\(abc)+

例如:

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1,\2,\3, ...,\1表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

\示例:grep \(r..t\).*\(a..b\) \1 \2

\1 :r..t

\2 :a..b

例如:第一个括号为\(r..t\) 那么\1也是r..t

或者:\|

示例:a\|b: a或b

C\|cat: C或cat

\(C\|c\)at:Cat或cat

例如:

{ps:有时候命令需要整体括起来,加双引号“”}


扩展正则表达式

扩展正则表达式和基本正常表达式的功能是类似的,包括基本正则表达式的字符匹配都是相同的,扩展正则表达式照样可以使用,不过扩展正则表达式和基本正则表达式还是有所不同,可以说在某些时候更加简单。

刚刚我们用的匹配次数、位置锚定、分组的命令有非常多的\,如果使用多了也会看得眼花缭乱,自己有时候也会输入错误或者忘记、漏掉\。

这里我只列出和基本正则有区别的命令:

字符匹配

(和基本正则一模一样)

匹配次数

?      表示?符号前的字符0-1次(在基本正则里? 表示?符号前的字符0-1次)

*        表示+前面的字符至少1次 (在基本正则里\+ 匹配\+前的字符至少1次)

例如:

{m,n}   表示{m,n}符号前的字符的m-n次

{m}      表示{m}符号前的字符m次

{n,}      表示匹配前面字符至少n次

{,n}      表示匹配前面字符最多n次

位置锚定

(和基本正则一模一样)

分组

(和匹配次数一样,把\全部去掉就行了)

grep (r..t).*(a..b) 1 2

\1 :r..t

\2 :a..b

(ps:\1还是要加\号的)


练习

在ifconfig 中找出其ip地址的命令。

ifconfig|grep -E “(<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>.){3}<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]>)”

例如:

grep 的常用选项

命令说明:按行处理,输出文件中包含搜索字符串的所有行。(按关键字搜索)

格式:grep [-acinv] ‘搜索字符串’ filename

grep        选取命令,查找

grep -i     忽略字符的大小写

grep --colour     高亮显示搜索结果

grep -o z          表示只显示匹配中的字符

grep -v             表示显示匹配外的字符行

grep -E             表示扩展正则表达式

grep -A 数字     表示匹配的字符所对应的行数的后几行将要被显示出来

grep -B 数字      表示匹配的字符所对应的行数的钱几行将要被显示出来

grep -C 数字      表示匹配的字符所对应的前后几行将要被显示出来

grep -E =egrep   (变量)

例子

在文件a.txt中搜索包含字符串good或glad的行:

grep -E 'g(oo|la)d' a.txt

找到以字母a结尾的单词:

grep -E 'a[[:blank]]' a.txt

grep -E 'a\\b' a.txt

文件查看命令:

cat的常用选项

命令说明:按行处理,将一行消息的某段切出来。(查看文本文件)

格式:cut -d '分割字符' -f fields

cut          查看文本文件

cut -A      显示所有

cut -E      显示每行的结束符

cut -n      加行号

cut -b      减去空白行(有字符的不减去,如空格,tab键)

cut -s      压缩相邻的空行

分页查看

more         分页显示(b向回翻页)

more -d     显示翻页及退出提示

less           分页显示(一页页查看文件或者输出,可以回翻,可以搜索)

(ps:man使用的就是less分页命令)

head的常用选项

head            查看命令(不加参数默认查看前10行)

head -n 3     查看命令前3行(不加n直接加数字也可以)

head -c 3     查看命令前3个字节(回车算一个字节,汉字3个字节)

tail的常用选项

tail            查看命令(不加参数默认查看后10行)

taul -c 3    查看命令从后开始3个字节

tail -f        追踪查看文件最新追加的内容是否有变化(一般用于日志监控)

tail -n 3     查看命令从后开始3行

(ps:& 可放置后台执行)

wc 的常用选项

命令说明:一般用于文本数据统计

格式:1. 行 2. 单词 3. 字节 4. 文件名

wc -l        统计行数

wc -w      统计单词

wc -c       统计字节

wc -m      统计字符

sort 的常用选项

sort -t:       指定:为分隔符(一般配合k使用,:可以更换各种分隔符, . / : % $ # 等)

sort -k:      指定:为分隔符的第几列排序

sort -n       数字排序

sort -r        倒序

sort -f        忽略大小写

sort -u       删除重复行

uniq 的常用选项

uniq          合并相邻的重复行

uniq -c      显示重复的次数

uniq -d      只显示重复过的行

uniq -u      只显示不重复的行

(ps: 连续并且完全相同才为重复)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容