都援救正则表达式

正则表达式只是生机勃勃种表示法,只要工具支持这种表示法,
那么该工具就足以处理正则表明式的字符串。vim、grep、awk 、sed
都支持正则表达式,约等于因为出于它们协助正则,才呈现它们强盛;在原先上班的集团里,由于公司是基于web的服务型网址(nginx卡塔尔(قطر‎,对正则的必要非常大,所以也花了点时间切磋正则,特与我们分享下:

1根基正则表达式
grep 工具,以前介绍过。
grep -[acinv] ‘找寻内容串’ filename
-a 以文件文件措施寻找
-c 总结找到的相符行的次数
-i 忽略大小写
-n 顺便输骑行号
-v 反向选取,即找 未有检索字符串的行
里头寻找串能够是正则表明式!

1
招来有the的行,并出口行号
$grep -n ‘the’ regular_express.txt
搜 索未有the的行,并出口行号
$grep -nv ‘the’ regular_express.txt

2 利 用[]探求集结字符
[] 表示当中的某三个字符 ,比方[ade] 表示a或d或e
woody@xiaoc:~/tmp$ grep -n ‘t[ae]st’ regular_express.txt
8:I can’t finish the test.
9:Oh! the soup taste good!

可以用^符号做[]内的前缀,表示除[]内的字符之外的字 符。
例如说寻找oo前未有g的字符串所在的行. 使用 ‘[^g]oo’ 作找出字符串
woody@xiaoc:~/tmp$ grep -n ‘[^g]oo’ regular_express.txt
2:apple is my favorite food.
3:Football game is not use feet only.
18:google is the best tools for search keyword.
19:goooooogle yes!

[] 内能够用范围表示,举例[a-z] 表示小写字母,[0-9] 表示0~9的数字,
[A-Z] 则是大写字母们。[a-zA-Z0-9]意味着所有数字与斯洛伐克语字符。
当然也能够相称^来清除字符。
查找富含数字的行
woody@xiaoc:~/tmp$ grep -n ‘[0-9]’ regular_express.txt
5:However ,this dress is about $ 3183 dollars.
15:You are the best is menu you are the no.1.

行首与行尾字符 ^ $. ^ 表示行的带头,$表示行的尾声(
不是字符,是岗位)那么‘^$’ 就表示空行,因为唯有
行首和行尾。
这里^与[]里头使用的^意义不一致。它象征^后边的串是懂行的伊始。
比如说寻找the在开头的行
woody@xiaoc:~/tmp$ grep -n ‘^the’ regular_express.txt
12:the symbol ‘*’ is represented as star.

寻觅以小写字母开首的行
woody@xiaoc:~/tmp$ grep -n ‘^[a-z]’ regular_express.txt
2:apple is my favorite food.
4:this dress doesn’t fit me.
10:motorcycle is cheap than car.
12:the symbol ‘*’ is represented as star.
18:google is the best tools for search keyword.
19:goooooogle yes!
20:go! go! Let’s go.
woody@xiaoc:~/tmp$

追寻起初不是Turkey语字母的行
woody@xiaoc:~/tmp$ grep -n ‘^[^a-zA-Z]’ regular_express.txt
1:”Open Source” is a good mechanism to develop programs.
21:#I am VBird
woody@xiaoc:~/tmp$

$表示它后面的串是熟识的最后,例如 ‘.’ 代表 . 在风流倜傥行的末段
寻找末尾是.的行
woody@xiaoc:~/tmp$ grep -n ‘.$’ regular_express.txt //.
是正则表明式的特殊符号,所以要用转义
1:”Open Source” is a good mechanism to develop programs.
2:apple is my favorite food.
3:Football game is not use feet only.
4:this dress doesn’t fit me.
5:However ,this dress is about $ 3183 dollars.
6:GNU is free air not free beer.
…..

只顾在MS的系列下转移的公文文件,换行会增长八个 ^M
字符。所以最终的字符会是潜伏的^M ,在管理Windows
下边包车型地铁文件时要特别注意!
可以用cat dos_file | tr -d ‘r’ > unix_file 来删除^M符号。
^M==r

那正是说’^$’ 就意味着除非洲开发银行首行尾的空行拉!
检索空行
woody@xiaoc:~/tmp$ grep -n ‘^$’ regular_express.txt
22:
23:
woody@xiaoc:~/tmp$

搜索非空行
woody@xiaoc:~/tmp$ grep -vn ‘^$’ regular_express.txt
1:”Open Source” is a good mechanism to develop programs.
2:apple is my favorite food.
3:Football game is not use feet only.
4:this dress doesn’t fit me.
……….

轻松叁个字符. 与重复字符 *

在bash中*表示通配符,用来表示专断个
字符,不过在正则表达式中,他含义分歧,*代表有0个或多少个 有些字符。
例如 oo*,
表示第八个o一定期存款在,第二个o能够有三个或八个,也能够未有,由此代表最少二个o.

点. 代表叁个随机字符,必需存在。 g??d 能够用 ‘g..d’ 表示。 good ,gxxd
,gabd …..都相符。

woody@xiaoc:~/tmp$ grep -n ‘g..d’ regular_express.txt
1:”Open Source” is a good mechanism to develop programs.
9:Oh! the soup taste good!
16:The world is the same with ‘glad’.
woody@xiaoc:~/tmp$

寻找五个o以上的字符串
woody@xiaoc:~/tmp$ grep -n ‘ooo*’ regular_express.txt
//前七个o一定期存款在,第四个o可不曾,也可有三个。
1:”Open Source” is a good mechanism to develop programs.
2:apple is my favorite food.
3:Football game is not use feet only.
9:Oh! the soup taste good!
18:google is the best tools for search keyword.
19:goooooogle yes!

搜索g初步和终极,中间是起码三个o的字符串,即gog, goog….gooog…等
woody@xiaoc:~/tmp$ grep -n ‘goo*g’ regular_express.txt
18:google is the best tools for search keyword.
19:goooooogle yes!

寻找g开首和最终的字符串在的行
woody@xiaoc:~/tmp$ grep -n ‘g.*g’ regular_express.txt // .*代表
0个或三个随机字符
1:”Open Source” is a good mechanism to develop programs.
14:The gd software is a library for drafting programs.
18:google is the best tools for search keyword.
19:goooooogle yes!
20:go! go! Let’s go.

限制延续重复字符的界定 { }
. * 只能节制0个或四个, 如若要妥帖的界定字符重复数量,就用{范围}
。范围是数字用,隔离 2,5 代表2~5个,
2代表2个,2, 表示2到更八个
瞩目,由于{
}在SHELL中有特异意义,由此作为正则表明式用的时候要用转义一下。

招来包涵三个o的字符串的行。
woody@xiaoc:~/tmp$ grep -n ‘o{2}’ regular_express.txt
1:”Open Source” is a good mechanism to develop programs.
2:apple is my favorite food.
3:Football game is not use feet only.
9:Oh! the soup taste good!
18:google is the best tools for search keyword.
19:goooooogle yes!

搜索g后面跟2~5个o,后边再跟三个g的字符串的行。
woody@xiaoc:~/tmp$ grep -n ‘go{2,5}g’ regular_express.txt
18:google is the best tools for search keyword.

搜索富含g前边跟2个以上o,后边再跟g的行。。
woody@xiaoc:~/tmp$ grep -n ‘go{2,}g’ regular_express.txt
18:google is the best tools for search keyword.
19:goooooogle yes!

注意,相让[]中的^ - 不表现特别含义,能够放在[]中间内容的前面。
‘[^a-z.!^ -]’ 表示从未小写字母,未有. 未有!, 未有空格,未有- 的
串,注意[]中间有个小空格。

别的shell 里面的反向接受为[!range], 正则里面是 [^range]

2恢宏正则表达式

扩大正则表达式是对基本功正则表达式增多了多少个出色构成的。
它令有些操作更是有利。
例如大家要去除 空白行和行首为 #的行, 会那样用:
woody@xiaoc:~/tmp$ grep -v ‘^$’ regular_express.txt | grep -v ‘^#’
“Open Source” is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
this dress doesn’t fit me.
…………

可是使用扶植扩张正则表明式的 egrep 与扩大特殊符号 | ,会有助于广大。
注意grep只援救底蕴表达式, 而egrep 援救扩展的, 其实 egrep 是 grep -E
的小名而已。因而grep -E 扶植增加正则。
那么:
woody@xiaoc:~/tmp$ egrep -v ‘^$|^#’ regular_express.txt
“Open Source” is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
this dress doesn’t fit me.
………………..
此地| 表示或的关系。 即满足 ^$ 只怕 ^# 的字符串。

此地列出多少个扩充特殊符号:
+, 于 . * 功能相近,表示 三个或多个再度字符。
?, 于 . * 效用相像,表示0个或二个字符。
|,表示或提到,比如 ‘gd|good|dog’ 表示有gd,good或dog的串
(),将一些剧情合成贰个单元组。 比方 要搜索 glad 或 good 能够这么
‘g(la|ooState of Qatard’
(卡塔尔国的补益是足以对小组使用 + ? * 等。
比如说要寻觅A和C初始结尾,中间有起码三个(xyz卡塔尔国 的串,能够这么 : ‘A(xyzState of Qatar+C’

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website