学习shell中的正则表达式

发布时间:2020-09-03编辑:脚本学堂
术语介绍:正则表达式是一种表示方式,可以让你查找匹配特定的准则的文本,例如以字母a开头的文件,学好正则表达式将使以后的文本处理变得方便,快速。

本文先给大家介绍

术语介绍:正则表达式是一种表示方式,可以让你查找匹配特定的准则的文本,例如以字母a开头的文件,学好正则表达式将使以后的文本处理变得方便,快速。

本文先给大家介绍字符串选取工具grep,然后介绍正则表达式的特殊字符的处理能力。

grep的基本语法:
[kouyang@kouyang kouyang]# grep [-ainvc]  '搜索字符串'  filename
参数说明:
-a :在二进制文件中以文本文件的方式搜索数据
-c  :计算找到指定字符串的次数
-i   :忽略大小写
-v : 反向选择
-n ;输出行号

[kouyang@kouyang kouyang]# grep 'root' /var/log/secure
在/var/log/secure文件中江含有root的那一行显示出来

[kouyang@kouyang kouyang]# last | grep  root
若该行有root将其显示到屏幕上
其他的参数可以逐个练习使用。

下面看看简单的正则表达式的匹配范例,通过这些范例,相信可以比较熟练的掌握基本的正则表达式的使用:
HelloWorld   匹配任意一行任何位置上的10个字母:HelloWorld
^HelloWorld  匹配出现在行首的10个字母:HelloWorld
HelloWorld$  匹配出现在行尾的10个字母:HelloWorld
^HelloWorld$  匹配只包括这10个字母:HelloWorld的一行
[Hh]elloWorld  匹配HelloWorld或者helloworld
Hello.World   匹配含有Hello这5个字母,再加上任何一个字符,再加上world
Hello*World  匹配含有Hello这5个字母,再加上任意个字母,再加上world

在上面的例子中利用“.”或者“*”,可以匹配0个或者多个字符,但是如果要匹配的字符是一个范围,这时候就要用到“{}”,因为shell中的 "{"和"}"有特殊含义,所以需要使用转移字符“”,例如:
[kouyang@kouyang  kouyang] #  grep -n 'o{2}'  hello.txt
在hello.txt文件中找出出现两个连续的"o"的那一行

[kouyang@kouyang kouyang]# grep  -n 'go{2, 5}g' hello.txt
在hello.txt文件中找到go后面出现2~5个"o"后面再紧接着一个"g"的单词的那一行。