正则表达式

2019-08-05  本文已影响0人  _str_

正则表达式

正则表达式就是处理字串的方法,他是以行为单位来进行字串的处理行为, 正则表达式通过一些特殊符号的辅助,可以让使用者轻易的达到“搜寻/删除/取代”某特定字串的处理程序!

特殊符号

特殊符号              代表意义
[:alnum:]            代表英文大小写字符及数字 0-9 a-z A-Z   
[:alpha:]            代表任何英文大小写字符    A-Z a-z
[:blank:]            代表空格键与【tab】按键两者
[:cntrl:]            代表键盘上面的控制按键,包括CR,LF,Tab,Del...等
[:dight:]            代表数字   0-9
[:graph:]            除了空格符(空格键与[Tab]键)外的其他所有按键
[:lower:]            代表小写字符, a-z
[:print:]            代表任何可以被打印出来的字符
[:punct:]            代表标点符号即:“ ‘ ?!;#$%...
[:upper:]            代表大写字符 A-Z
[:space:]            任何会产生空白的字符,包括空格键,[Tab] ,CR
[:xdigit:]           代表16进位的数字类型,包括这些0-9 A-F a-f

重点

[:alnum] 代表所以的大小写英文字符和数字 0-9 A—Z a-z
[:alpha:] 代表任意英文大小写字符  A-Z a-z
[:lower:] 代表小写字符       a-z
[:upper:] 代表大写字符        A-Z
[:digit:] 代表数字         0-9
鸟哥私房菜中的链接
"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.
However, this dress is about $ 3183 dollars.
GNU is free air not free beer.
Her hair is very beauty.
I can't finish the test.
Oh! The soup taste good.
motorcycle is cheap than car.
This window is clear.
the symbol '*' is represented as start.
Oh! My god!
The gd software is a library for drafting programs.
You are the best is mean you are the no. 1.
The world <Happy> is the same with "glad".
I like dog.
google is the best tools for search keyword.
goooooogle yes!
go! go! Let's go.
# I am VBird

示例

grep oo   文件名  文件名   查找这几个文件中含有oo的 开头会显示文件名
grep -n '^#' regular_express.txt   将找到以#开头的那一行
^world
这个特殊符号的意义是搜寻以#为开头的那一行并列出行号
grep -n '!$' regular_express.txt   将找到以!结尾的一行数据打印出来
!$
这个特殊符号的意义是搜寻以!为结尾的那行列出行号
grep -n '^$'  regular_express.txt   查找空白行
grep -n 'e.e'   regular_express.txt  找到'e e' 中间必须有一个任意字符
e.e
这个特殊符号的意义是找到(eve)(eae)(eee)(e e)仅仅有一个字符也可是空格
grep -n 'ess*'  regular_express.txt   将找到s以后的零个一个或者无穷多个s字符 
ess*
这个特殊符号的意义是找到ess之后的零个或无数多个字符 这个字符跟*前面的那个字符有关
grep -n 'g[ld]' regular_express.txt  搜寻找出含有gl和gd的那行
[list]
这个意义是括号里面是单一的字符不是一个词组搜寻的结果是含有外面的加上里面的每一个的那一行
grep -n '[0-9]'  regular_express.txt  找到想要搜寻含有数字的哪一行
[n1-n2]
搜寻含有任意数字的那一行,括号中的减号有特殊意义,代表两个字符之间的所有连续字符,但这个连续与编码有关 需要确定LANG语系
grep -n 'oo[^t] regular_express.txt   找到oo后面没有t的那行
[^list]
^在[]里面代表是反向选择 就是找到不含这个括号中的字符
grep -n 'go\{2,3\}g' regular_express.txt 找到在g与g之间有两个或三个的o存在的字符串
\{n,m\}
连续n到m个的前一个字符

grep进阶

-A   n  把匹配成功行之后的n行也同时列出
-B   n  把匹配成功行之前的n行也同时列出
[root@dai ~]# grep mail -B 2 -A 3 /etc/passwd
显示目标行和前两行还有后三行
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin   #找到的mail行
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@dai ~]# grep mail -C3 /etc/passwd
显示目标行和前后三行
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin   #目标行
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
grep -o 'nologin' /etc/passwd   只显示匹配到的字符
grep -o -c 'nologin' /etc/passwd     将匹配到的字符进行统计 会显示一个数字
grep -l 'nologin' /etc/passwd    显示文件名  没啥用 后面就接着文件名
grep  -r  'nologin' /etc/   递归查找,就是在一个目录下查找
grep -n 't[ae]st' file1   搜索 test 或 taste
grep -n '[^g]oo'  file1      搜索 oo 但其前面不要有g

执行上一个命令的时候会忽略明确不要的条件就会查询到下面的这个两条

3:tool is a good tool
8:goooooogle   这个是因为命令查询到两个oo前面不一定是g 所以会显示出来

显示oo前面非小写字符的行
方法一

grep -n '[^a-z]oo' file

方法二

grep -n  ‘[^[:lower:]]oo’ file1 

显示开头非英文字符的行

grep -n '^[^[:lower:]]'  file1
符号^在外面是行首的意思 在里面是取反的意思

显示行首不是#和;的行

grep '^[^#;]' file1

找到以点.结尾的行

grep -n  ‘\.$’ file1      \是用来转义的

查找 开头是 g 和结尾也是 g ,中间的字符可有可无

grep -n   'g.*g' fiel1
. 代表一个任意字符
* 代表重复零到多个在 其前面的一个字符
.* 代表零个或多个任意字符

查找以a为开头的任意文件名
方法一:

通配符
ls -l a*

方法二:

ls |grep -n ‘^a.*’

列出 /etc 目录下的链接文件 统计一下多少个

ls -l /etc |grep ‘^l’  |wc -l  

查找仅含有2个o的字符串

grep -n 'o\{2\}' regular_express.txt
输出:
1:"Open Source" is a good mechanism to develop programs.
19:gooooogle yes!

由于没有限定字符 o 后面的字符,所以会有19行的出现
查找含有2到4个o ,且以 g 结尾的字符串

grep -n 'go\{2,4\}g' regular_express.txt
输出:
18:google is the best tools for search keyword.

扩展正则 egrep

egrep -n 'go+d'  regular_express.txt   搜到一个以上的o
+ 
 [root@dai ~]# egrep -n 'go+d' regular_express.txt 
1:"Open Source" is a good mechanism to develop programs.
9:Oh! The soup taste good.
RE符  ?
[root@dai ~]# egrep -n 'go?d' regular_express.txt    找到一个o或者空的
13:Oh!  My god!
14:The gd software is a library for drafting programs.
RE符  |
[root@dai ~]# egrep -n 'gd|good' regular_express.txt    找到gd 或者good的行
1:"Open Source" is a good mechanism to develop programs.
9:Oh! The soup taste good.
14:The gd software is a library for drafting programs.
RE符  () 括号里面的以|隔开的是一个组
[root@dai ~]# egrep -n 'g(la|oo)d' regular_express.txt  
1:"Open Source" is a good mechanism to develop programs.
9:Oh! The soup taste good.
16:The world <Happy> is the same with "glad".
RE符 ()+  括号是重复多个组 +是去加上结尾
[root@dai ~]# echo 'AxyzxyzxyzxyzC' |egrep 'A(xyz)+C'
AxyzxyzxyzxyzC
这个例子的意思是要找开头是A结尾是C的然后中间可以重复多个xyz
上一篇 下一篇

猜你喜欢

热点阅读