您的位置:首页 > 运维架构 > Linux

Linux-正则表达式

2017-07-11 07:44 246 查看
Linux正则表达式
正则表达式是什么

正则表达式就是处理字符串的方法,它是以行为单位来进行字符串的处理行为,正则表达式通过一些特殊符号的辅助,可以用户轻易达到查找、删除、替换特定字符串的处理程序。

正则表达式和通配符

通配符(wtilcard):是bash操作接口的一个功能。例如:ls、find、cp

正则表达式:是一种字符串处理的表达方式。例如:vi、grep、awk、sed等工具

基础正则表达式字符

RE字符
意义
例子
^word
待查找的字符串
grep -n ‘^#’ test.txt
word$

待查找的字符串在行尾
grep -n ‘!$’ test.txt

.
代表一定有一个任意字符的字符
grep -n ‘e.e’ test.txt
\
转义字符,将特殊符号的特殊意义去除
grep -n 
\’ 
test.txt
*
重复零个到无穷多个的前一个字符
grep -n ‘ess*’ test.txt
[list]
从字符集合的字符里面找出想要选取的字符
grep -n ‘g[ld]’ test.txt
[n1-n2]
从字符集合的字符里面找出想要选取的字符范围
grep -n ‘[0-9]’ test.txt
[^list]
从字符集合字符里面找出不要的字符串或范围
grep -n ‘oo[^t]’ test.txt
\{n,m\}
连续n到m个的前一个字符
grep -n ‘go\{2,3\}g’ test.txt
[注1]:在通配符中的*代表的是零到无限多个字符的意思,但在正则表达式中,*则是重复0到无穷多个的前一个字符的意思。

[注2]:正则表达式中包含?、*、+、{、}、(、)、等符号时,必须使用反斜杠(“\”)转义。但是<>符号不需要转义。

扩展型正则表达式

RE字符
意义
例子
+
重复一个或一个以上的前一个RE字符
egrep -n ‘go+d’ test.txt

零个或一个的前一个RE字符
egrep -n ‘go?d’ test.txt

|
用或(or)的方式找出数个字符串
egrep -n ‘gd|dood’ test.txt
()
找出“组”字符串
egrep -n ‘g(la|oo)d’ test.txt

()+
多个重复组的判别
echo ‘AxyzxyzC’ | egrep ‘A(xyz)+C’ test.txt
特殊符号

特殊符号
代表意义
[:alnum:]
ASCII码从33~126之间的可打印字符
[:alpha:]
小写及大写字母,等价于[a-zA-Z]
[:blank:]
代表空格键与[Tab]键
[:cntrl:]
控制按键,包括CR、LF、Tab、Del
[:digit:]
数字0~9,等价于[0-9]
[:graph:]
除了空格符(空格键和[Tab])以外的其他按键
[:lower:]
小写字母,等价于[a-z]
[:print:]
代表任何可以被打印出来的字符
[:upper:]
大写字母,等价于[A-Z]
[:space:]
空白字符,包括空格、水平制表符、垂直制表符、换行、换页、回车
[:xdigit:]
十六进制字符,等价于[a-fA-F0-9]
Awk内置变量

变量名称
代表的意义
NF
每行($0)拥有的字段总数

NR
目前awk所处理的时“第几行”数据

FS
目前的分和服,默认时空格键

常用正则表达式

[匹配并修改IP地址]

1)IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”

2)IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数

例如:将addr文件中IPADDR=192.168.25.23修改成IPADDR=192.168.25.100

方法一:

sed  's/\(IPADDR=\(\(25[0-5]\|2[0-4][0-9]\|\<1\?[0-9][0-9]\?\)\.\)\{3\}\).*/\1100/'reg.txt

方法二:

sed 's/\(IPADDR=\(\(25[0-5]\|2[0-4][0-9]\|1[0-9][0-9]\|[1-9][0-9]\|[0-9]\)\.\)\{3\}\).*/\166/'reg.txt

[匹配邮箱]

1)邮箱完整地址由用户名@域名组成

2)用户名最少三个字符,由由字母、数字、下划线组成,字母不区分大小写

3)域名应至少有一个 .
分隔,分隔的各部分至少2个字符,可能由字母、数字组成

例如:找着类似25642564qq.com

egrep '[0-Z_]{3,}@[0-Z]{2,}(\.[0-Z]{2,})+' reg.txt

grep '[0-Z_]\{3,\}@[0-Z]\{2,\}\.[0-Z]\{2,\}' reg.txt

[匹配MAC地址]

1)MAC地址由12个16进制的字母组成

2)16个字母是0~9、a~f
。不区分大小写,一般为大写

3)每两个字母为一组,共六组,每组间用冒号:隔开

例如:找到类似 00:0C:29:88:83:1A

egrep '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}' text.txt

grep '[0-9a-fA-F]\{2\}\(:[0-9a-fA-F]\{2\}\)\{5\}' text.txt

[去除空白行与首行为#的行列]

grep -v '^$' text.txt | grep -v '^#'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  正则表达式 linux