12-Linux的正则表达式(综合网络整理)
2018-02-08 10:24
246 查看
一、什么是正则表达式
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
注意:
①正则表达式是个广义的概念,在这里讲的是针对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博客)
三、基础正则字符说明(文中的所有示例请调整别名后自行看效果)
1、^word
匹配以word开头的内容,在vi/vim编辑器里,^代表一行的开头。
2、word匹配以word结尾的内容,在vi/vim编辑器里,匹配以word结尾的内容,在vi/vim编辑器里,代表一行的结尾。
3、^表示空行。例:①过滤出来以m开头的行grep“m”oldboy.log②过滤出来以m结尾的行grep“m表示空行。例:①过滤出来以m开头的行grep“m”oldboy.log②过滤出来以m结尾的行grep“m” oldboy.log
③过滤空行
grep -v “^” oldboy.log #排除空行
grep -n “^” 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 “.以任意多个字符结尾。 例: ①匹配任意一个字符 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、\b
单词边界
例:
grep “oldboy\b” oldboy.log
grep “\boldboy\b” oldboy.log
2、\n
换行
3、\r
回车
4、\t
横向制表符,相当于tab
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
注意:
①正则表达式是个广义的概念,在这里讲的是针对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 like badminton 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 not oldbey,but OLDBOY! GONGLI gd good goood Glad oldboy1
三、基础正则字符说明(文中的所有示例请调整别名后自行看效果)
1、^word
匹配以word开头的内容,在vi/vim编辑器里,^代表一行的开头。
2、word匹配以word结尾的内容,在vi/vim编辑器里,匹配以word结尾的内容,在vi/vim编辑器里,代表一行的结尾。
3、^表示空行。例:①过滤出来以m开头的行grep“m”oldboy.log②过滤出来以m结尾的行grep“m表示空行。例:①过滤出来以m开头的行grep“m”oldboy.log②过滤出来以m结尾的行grep“m” oldboy.log
③过滤空行
grep -v “^” oldboy.log #排除空行
grep -n “^” 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 “.以任意多个字符结尾。 例: ①匹配任意一个字符 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、\b
单词边界
例:
grep “oldboy\b” oldboy.log
grep “\boldboy\b” oldboy.log
2、\n
换行
3、\r
回车
4、\t
横向制表符,相当于tab
相关文章推荐
- [IT综合面试]牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- [IT综合面试]牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- linux正则表达式持续整理中
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- Linux基础-正则表达式整理---------------grep、sed、awk
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- 05-Linux基础入门(四)-目录结构(综合网络整理)
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- 一只简单的网络爬虫(基于linux C/C++)————利用正则表达式解析页面
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结(转)
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
- 在linux下,如何在C语言中使用正则表达式(整理)
- Linux企业级项目实践之网络爬虫(14)——使用正则表达式抽取HTML正文和URL
- [综合面试] 牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结