12-Linux的正则表达式(综合网络整理)
Posted 从零开始LINUX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12-Linux的正则表达式(综合网络整理)相关的知识,希望对你有一定的参考价值。
一、什么是正则表达式
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
注意:
①正则表达式是个广义的概念,在这里讲的是针对Linux使用的正则表达式。
②正则表达式和我们常用的通配符特殊字符是有本质区别的。
③Linux正则表达式一般以行为单位处理的。
④为了使最终结果显示的更好,建议调整别名(alias grep=\'grep --color=auto\'),让匹配的内容显示颜色。
⑤注意字符集:LC_ALL=C。
⑥本文章是以grep使用为例,可能会跟使用awk,sed有所差异。
二、学习此内容的准备工作
①调整别名
alias grep=\'grep--color=auto\'
②调整字符集
export LC_ALL=C
③检查字符集是否更改
echo $LC_ALL
④模拟数据(例子来源于老男孩51cto博客)
cat>>oldboy.log <<GONGLI
I am oldboy teacher!
I teach linux.
I likebadminton ball ,billard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000488.
not 4900000448.
my god,i am notoldbey,but OLDBOY!
GONGLI
gd
good
goood
Glad
oldboy1
三、基础正则字符说明(文中的所有示例请调整别名后自行看效果)
1、^word
匹配以word开头的内容,在vi/vim编辑器里,^代表一行的开头。
2、word$
匹配以word结尾的内容,在vi/vim编辑器里,$代表一行的结尾。
3、^$
表示空行。
例:
①过滤出来以m开头的行
grep "^m"oldboy.log
②过滤出来以m结尾的行
grep "m$" oldboy.log
③过滤空行
grep -v "^$" oldboy.log #排除空行
grep-n "^$" oldboy.log #-n显示行号
grep-vn "^$" oldboy.log #显示行号并取反
4、.
代表且只代表任意一个字符。
5、
转义符号,.就只代表点本身,让有着特殊身份意义的字符脱掉马甲,还原原型。
6、*
重复0个或多个前面的一个字符。
7、.*
匹配所有字符。
延伸:
^.*以任意多个字符开头,.*$以任意多个字符结尾。
例:
①匹配任意一个字符
grep-n "." oldboy.log #结果无空行
grep-n ".*" oldboy.log #文件有啥显示啥
grep -ni "oldb.y" oldboy.log #匹配oldb(x)y的,-i意思是也匹配大写
②匹配以点结尾的错误方法
grep -n ".$"oldboy.log
③匹配以点结尾的正确方法(只匹配点,转义)
grep -n ".$"oldboy.log
④只显示匹配的内容(-o)
grep -on"oldb.y" oldboy.log
补充-点的含义小结:
①当前目录
②使得文件生效相当于source
③隐藏文件
④任意一个字符
8、[abc]
匹配字符集合内的任意一个字符[a-zA-Z],[0-9]。
9、[^abc]
匹配不包含^后的任意一个字符的内容。
提示:中括号里的^为取反,注意和中括号外面以…开头区别。
10、关于a、n、m、{}和的组合
①a{n,m}
重复n到m次,前一个重复的字符。
②a{n,}
重复至少n次,前一个重复的字符。
③a{n}
重复n次,前一个重复的字符。
④a{,m}
重复至多m次,前一个重复的字符(CentOS5不能用)。
注意:上述如果用egrep(grep -E)/sed -r可以去掉斜线,egrep或sed -r过滤一般特殊字符可以不转义(不用)。
例:
①匹配字符
grep"[abc]" oldboy.log #取含有a、b、c单个字符
grep"[^abc]" oldboy.log #取不含有a、b、c单个字符
grep"[a-z]" oldboy.log #匹配含有小写a-z字母
②匹配数字的行
grep "[0-9]"oldboy.log
③匹配非数字的行
grep"[^0-9]"oldboy.log
④匹配重复次数
grep"0{3}" oldboy.log #只匹配三次
grep"0{3,}" oldboy.log # 至少匹配三次
grep"0{3,4}" oldboy.log #匹配三到四次
grep"0{,3}" oldboy.log # 最多三次
四、扩展正则字符说明(grep -E或egrep,此处了解即可,文中的所有示例请调整别名后自行看效果)
1、+
表示重复“一个或一个以上”前面的字符(*是0或多个)。
2、?
表示重复“0个或1个”前面的字符(.是有且只有1个)。
3、|
表示同时过滤多个字符。
4、()
分组过滤,后向引用。
例:
①表示重复“一个或一个以上”前面的字符(*是0或多个)
grep -E"go+d" oldboy.log
grep -E"go*d" oldboy.log
②?表示重复“0个或1个”前面的字符
grep -E"go?d" oldboy.log
grep -E"go.d" oldboy.log
③ | 表示同时过滤多个字符
grep -E"3306|1521" /etc/services
grep -E"god|good" oldboy.log
④()表示分组过滤,后向引用
grep -E"g(la|oo)d" oldboy.log
五、常用的元字符说明
1、
单词边界
例:
grep"oldboy" oldboy.log
grep"oldboy" oldboy.log
2、
换行
3、
回车
4、
横向制表符,相当于tab
以上是关于12-Linux的正则表达式(综合网络整理)的主要内容,如果未能解决你的问题,请参考以下文章