您的位置:首页 > 理论基础 > 计算机网络

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博客)

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐