您的位置:首页 > 运维架构 > Linux

linux中grep和egrep以及元字符的使用

2014-02-20 14:09 218 查看
Pattern(模式):文本字符和正则表达式的元字符组合而成匹配条件.
Regular Expression(正则表达式):是一类字符书写出来的模式(Patern).
Metacharacter(元字符):不表示字符本身的意义,在正则表达式中用于额外功能的描述。

1.grep,egrep,fgrep的简介: grep:( global search regular expression (RE)) and print out the line。grep是一款功能强大的文本搜索工具,根据用户指定的文本模式对目标文件(输入文件:input files或标准输入设备:standard input)进行逐行搜索,显示能够被模式匹配的行。
egrep:egrep的命令只和grep有很小不同,使用扩展的正则表达式构建模式,egrep是grep的扩展相当于grep -e,可以支持更多的RE元字符。

fgrep:fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符 表示回其字符本身的意义,不再特殊功能。

2.grep的工作方式:grep在一个或多个文件中搜索用户指定的模式。如果模式包括空格,则必须被引用,模式后的所有字符串被看作文件名。搜索的结果被送到屏幕,不影响原文件内容。3.grep的使用格式: grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
4.grep的常用选项: 不带任何选项:在目标文件中查找并显示与模式匹配的行。 例: 在/etc/passwd中查找并显示用户名为“root”用户的信息

-n:列出模式中匹配的行以及行号
例:查找并显示在/etc/group中"mandrivia"所在的行和行号


-v:反向匹配显示不能被模式匹配的行

例: 在/etc/passwd中查找并显示除了“root”之外的所有用户的信息 (结果中的一部分)



-o:仅匹配行当中被模式匹配到的字串,而不是整行
例: 在/etc/group中查找"mandrivia",并显示

-i:在搜索的目标文件中不去分大小写字母进行模式匹配 例: 在/var/log/boot.log-20140216查找字母"o"和"O"所在的行

-E:支持扩展的正则表达式
例: 在/etc/rc.d/init.d/network中查找并显示"t"至少出现2次所匹配的行

-A #:支持匹配到的字符串所匹配的行以及下#行(#:表示数字) 例: 在/etc/fstab中查找并显示"/dev/shm "所匹配的行以及下2行

-B #:支持匹配到的字符串所在的行以及上#行(#:表示数字) 例: 在/etc/host.conf 中查找并显示"order "所匹配的行以及上1行

-C #:支持匹配到的字符串所在的行以及上下#行(#:表示数字) 例:在/proc/meminfo查找"MemFree"所在的行以及上一行和下一行



5.正则表达式和扩展正则表达式元字符以及元字符使用: 5.1:标准RE的元字符级grep的使用 5.1.1字符匹配 [[:punct:]]:标点符号
[[:lower:]]:小写字母
[[:upper:]]:大写字母
[[:digit:]]:数字
[[:alnum:]]:数字和大小写字母
[[:alpha:]]:所有大小写字母 [[:space:]]:所有空格字符 5.1.1.1 例:显示"Aa12@"中的字母不区分大小写

显示"A a12@"中的空白字符




.:任意单个字符

5.1.1.2 例:



[]:指定范围内的任单个字符
5.1.1.3 例:




[^]:指定范围外的任意单个字符
5.1.1.4 例:



5.1.2:次数匹配:用来指定匹配其前面的字符的次数

*:匹配其前的字符任意次
5.1.2.1例:




\?:匹配其前的字符0次或1次

5.1.2.2例:




贪婪模式:尽可能多的匹配所搜索的字符串
.*:匹配任意长度的任意字符

5.1.2.3例:




\{m\}:匹配其前的字符m次
\{m,n\}:匹配其前的字符m次到n次
\{m\, }:匹配其前的字符至少m次
\{ ,n\}:匹配其前的字符至多n次
5.1.2.4例:"o"出现2次




5.1.2.5例:"o"至少出现3次





5.1.3:位置锚定

^:用于锚定行首的字符
5.1.3.1例:查找并显示以"z"开头的用户的所有信息




$:用于锚定行尾的字符

5.1.3.2例:显示以"n"为行尾的所有用户组的信息




$^:锚定空白行
5.1.3.3例:




\<词(\b词):锚定词首
5.1.3.4例:显示用户名为zhou的所有信息:




\>词(词\b):锚定词尾
5.1.3.5例:显示shell为/bin/bash的所有用户





5.4.分组元字符
\(\):括号限定多选结构的范围,标注量词作用的元素,为反向引用”捕获”文本
\1,\2,…:反向引用 匹配之前的第一、第二组括号内的字表达式匹配的文本
使用括号的3个理由:限制多选结构、分组、捕获文本

5.4.1例:显示当前正确的IP且范围为:1.0.0.1--223.255.255.254



5.4.2例:




5.2扩展RE元字符及egrep的使用

5.2.1字符匹配
用法同标准的正则表达式元字符使用相同
例:在/var/log/boot.log-20140216查找字母"o"和"O"所在的行




5.2.2次数匹配

*:匹配其前的字符任意次
?:匹配其前的字符0次或1次
+:匹配其前的字符至少1次

.*:匹配任意长度的任意字符
{m}:匹配其前的字符m次
{m,n}:匹配其前的字符m次到n次
{m, }:匹配其前的字符至少m次
{ ,n}:匹配其前的字符至多n次

例:查找以r开头后面至少有一个o的用户所在的行





5.2.3位置锚定

^:锚定行首

$:锚定行尾

\<词(\b词):锚定词首
\>词(词\b):锚定词尾

5.2.4分组

():括号限定多选结构的范围,标注量词作用的元素,为反向引用”捕获”文本
|:逻辑或操作符
例:显示当前正确的IP且范围为:1.0.0.1 - 223.255.255.254


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息