linux的正则匹配之我的理解
【IT168 服务器学院】正则表达式的灵活运用能给工作带来事半功倍的效果。正确运用正则表达式同时也会给你在处理问题上带有很大的兴趣和乐趣。
在linux系统中的正则命令有两个,grep与egrep。egrep是grep的延伸,其功能也比grep强大,同时也有几个特征是grep没有的。下面我就来说说这两个的不同点与相同之处。
由于egrep是grep的延伸,在下面的说明中,我以egrep来说明
egrep的用法
egrep -option pattern file
它的常用属性有:
-a 如果文件是二进制文件,那么把文转为文本文件后再匹配
-v 反转匹配,就是常说的“非”的意思
-i 不区分大小写
-c 统计匹配
-n 显示出行号
它的一些常用的pattern说明
. 匹配一个字符
? 匹配0个或1个字符
* 匹配0个或多个字符
+ 匹配1个或多个字符
{} 区域集
() 成组
[] 字符集合
^ 开始
$ 结尾
| 或
\ 转义符
下面我列举几个例子说明一下
(1)查找文件a.txt中所有的"the"字符
egrep "the" a.txt
(2)查找文件a.txt中所有的不区分大小写的"the"并显示总共查找到多少处
egrep -ic "the" a.txt
(3)查找文件a.txt中所有的有数字的行并显示出行号
egrep -n "[0-9]" a.txt
(4)查找文件a.txt中有连续2个或4个“o”的行
egrep -n "o{2,4}" a.txt
(5)查找文件a.txt中以数字开头的行
egrep -n "^[0-9]" a.txt
(6)查找文件a.txt中以“.”结尾的行
egrep -n "\.$" a.txt
上面几个例子中基本上说明了egrep的用法,需要知道的是,无论是egrep还是grep都是以"行"为工作前提的。下面我再列出两个与正则有关的,也同样很常用的两个小工具sed与awk。
sed与awk可以说是两个小巧的输入处理工具,说它小巧并不是说它不强大,相反,如果你愿意,awk可以比你想像中的还要强大。下面我来说说这两个工具的用法。
sed的用法说明:
sed option action file
常用的option有:
-n 安静模式。一般地来说,标准输入的内容都会显示在屏幕上,但加上-n参数后,那么只有经过sed的action处理的那一行才会显示出来
-e 直接在指令模式上进行sed的编辑
-f 导入文件中的action
常用的动作有:
a 增加
d 删除
c 取代
i 插入
p 显示指定行
s 搜索
下面用几个例子说明一下sed的实际用法
(1)列出/etc/passwd的内容,并把显示的2至5行删除不显示(注:这里是显示屏幕上的删除,并不是文件的删除,不用担心passwd文件的2至5行会不见了)
sed "2,5d" /etc/passwd
(2)列出/etc/passwd的内容,并在第1行上增加显示“Love you"字样
sed "1a Love you" /etc/passwd
(3)列出/etc/passwd的内容,并只显示2到5行
nl /etc/passwd | sed -n "2,5p"
(4)列出本机的IP地址,这个比较有难度。
ifconfig eth0 | sed "s/^.*addr://g" | sed "s/Bcast.*$//g"
这个的意思就是显示eth0的内容,查找开始.....
在linux系统中的正则命令有两个,grep与egrep。egrep是grep的延伸,其功能也比grep强大,同时也有几个特征是grep没有的。下面我就来说说这两个的不同点与相同之处。
由于egrep是grep的延伸,在下面的说明中,我以egrep来说明
egrep的用法
egrep -option pattern file
它的常用属性有:
-a 如果文件是二进制文件,那么把文转为文本文件后再匹配
-v 反转匹配,就是常说的“非”的意思
-i 不区分大小写
-c 统计匹配
-n 显示出行号
它的一些常用的pattern说明
. 匹配一个字符
? 匹配0个或1个字符
* 匹配0个或多个字符
+ 匹配1个或多个字符
{} 区域集
() 成组
[] 字符集合
^ 开始
$ 结尾
| 或
\ 转义符
下面我列举几个例子说明一下
(1)查找文件a.txt中所有的"the"字符
egrep "the" a.txt
(2)查找文件a.txt中所有的不区分大小写的"the"并显示总共查找到多少处
egrep -ic "the" a.txt
(3)查找文件a.txt中所有的有数字的行并显示出行号
egrep -n "[0-9]" a.txt
(4)查找文件a.txt中有连续2个或4个“o”的行
egrep -n "o{2,4}" a.txt
(5)查找文件a.txt中以数字开头的行
egrep -n "^[0-9]" a.txt
(6)查找文件a.txt中以“.”结尾的行
egrep -n "\.$" a.txt
上面几个例子中基本上说明了egrep的用法,需要知道的是,无论是egrep还是grep都是以"行"为工作前提的。下面我再列出两个与正则有关的,也同样很常用的两个小工具sed与awk。
sed与awk可以说是两个小巧的输入处理工具,说它小巧并不是说它不强大,相反,如果你愿意,awk可以比你想像中的还要强大。下面我来说说这两个工具的用法。
sed的用法说明:
sed option action file
常用的option有:
-n 安静模式。一般地来说,标准输入的内容都会显示在屏幕上,但加上-n参数后,那么只有经过sed的action处理的那一行才会显示出来
-e 直接在指令模式上进行sed的编辑
-f 导入文件中的action
常用的动作有:
a 增加
d 删除
c 取代
i 插入
p 显示指定行
s 搜索
下面用几个例子说明一下sed的实际用法
(1)列出/etc/passwd的内容,并把显示的2至5行删除不显示(注:这里是显示屏幕上的删除,并不是文件的删除,不用担心passwd文件的2至5行会不见了)
sed "2,5d" /etc/passwd
(2)列出/etc/passwd的内容,并在第1行上增加显示“Love you"字样
sed "1a Love you" /etc/passwd
(3)列出/etc/passwd的内容,并只显示2到5行
nl /etc/passwd | sed -n "2,5p"
(4)列出本机的IP地址,这个比较有难度。
ifconfig eth0 | sed "s/^.*addr://g" | sed "s/Bcast.*$//g"
这个的意思就是显示eth0的内容,查找开始.....
0
相关文章