9 grep & egrep & 正则表达式

grep

grep = Global search REgular expression and Print out the line

语法及用途

grep [OPTIONS] PATTERN [FILE...]

根据用户指定的“ PATTERN ”对FILE逐行进行匹配检查,打印匹配到的行;
PATTERN 是由正则表达式字符及文本字符所编写的过滤条件。

常用选项

参数 说明
–color=auto 对匹配到的文本着色显示;
-v 显示不能够被pattern匹配到的行;
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串;
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系(grep –e ‘cat ’ -e ‘dog’ file)
-w 整行匹配整个单词
-E 使用扩展正则表达式ERE,否则使用基本正则表达式BRE

正则表达式

基本正则表达式BRE

字符匹配

字符 含义
. 匹配任意单个字符;
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:digit:] 数字
[:lower:] 小写字母
[:upper:] 大写字母
[:alpha:] 字母
[:alnum:] 字母与数字
[:punct:] 标点
[:space:] 空字符或tab

匹配次数

用在要指定次数的字符后面,用于指定前面的字符要出现的次数
字符 含义
* 匹配前面的字符任意次,包括0次(贪婪模式:尽可能长的匹配)
.* 任意长度的任意字符
? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{m\} 匹配前面的字符m次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{m,\} 匹配前面的字符至少m次

位置锚定

定位出现的位置
字符 含义
^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定;用于单词模式的右侧
\<PATTERN\> 匹配整个单词

分组

\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
    \1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
        实例: \(string1\+\(string2\)*\)
              \1: string1\+\(string2\)*
              \2: string2
后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身),即\1引用的第一个匹配到的结果,而非模式。

扩展正则表达式ERE

要使用扩展正则表达式,需要使用egrep或grep -E命令,如下所示:
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]

字符匹配

字符 含义
. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符

次数匹配

字符 含义
* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{m} 匹配m次
{m,n} 至少m,至多n次

位置锚定

字符 含义
^ 行首
$ 行尾
\<, \b 语首
\>, \b 语尾

分组

() 后向引用:\1, \2, …

或者

a|b 

C|cat    :C 或 cat 

(C|c)at  :Cat 或 cat


练习

  1. 显示/proc/meminfo信息中以s或S开头的信息

image1.png

  1. 显示rpc用户所使用的shell类型

image2.png

  1. 查看/etc/passwd中出现的2~3位数字

image3.png

  1. 查看/etc/grub2.cfg中以空白开始的非空行

image4.png

  1. 查看/etc/passwd 中用户名与shell同名的用户信息

image5.png

  1. 显示当前系统root、mage或wang用户的UID和默认shell

image6.png

  1. 找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

image7.png

  1. 使用egrep取出/etc/rc.d/init.d/functions中其基名

image8.png

  1. 使用egrep取出上面路径的目录名

image9.png

  1. 统计以root身份登录的每个远程主机IP地址的登录次数

image10.png

  1. 利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255

0-9     :   [0-9]
10-99   :   [1-9][0-9]
100-199 :   1[0-9]{2}
200-249 :  2[0-4][0-9]
250-255 :  25[0-5]
  1. 显示ifconfig命令结果中所有IPv4地址

12.png


  1. [😒pace:] 

原创文章,作者:taobaibai,如若转载,请注明出处:http://www.178linux.com/31646