12-Linux基础入门-Linux的正则表达式(综合网络整理)

Posted 张雨嘉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12-Linux基础入门-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、\b

单词边界

例:

grep"oldboy\b" oldboy.log

grep"\boldboy\b" oldboy.log

2、\n

换行

3、\r

回车

4、\t

横向制表符,相当于tab


以上是关于12-Linux基础入门-Linux的正则表达式(综合网络整理)的主要内容,如果未能解决你的问题,请参考以下文章

Linux之正则表达式的应用

11-Linux基础入门-Linux的通配符

11-Linux基础入门-Linux的通配符

正则表达式基础入门

.NET正则表达式基础入门

Python 基础入门 8_1 正则表达式