Grep 和 Egrep 使用细解

前端之家收集整理的这篇文章主要介绍了Grep 和 Egrep 使用细解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Grep 想说爱你不容易

j_0020.gif


grep:

Global search REgular expression and Print out the line

文本搜索工具:根据用户指定的“模式(pattern)”对目标文本进行过滤,显示被模式匹配到的行。


用法grep [OPTION]... 'PATTERN' FILE...

grep--color 自动执行着色


正则表达式:是由一类字符书写的模式,其中有些字符不表示字符的字面意义,而是表示控制或通配功能


两种类型的元字符

  • 基本正则表达式

  • 扩展正则表达式


基本正则表达式:

字符匹配:

  • . 匹配任意单个字符

  • [] 匹配指定集合中的任意单个字符

  • [[:digit:]],[0-9]匹配指定集合中的单个数字

  • [[:lower:]],[a-z]匹配指定集合中的单个小写字母

  • [[:upper:]],[A-Z]匹配指定集合中的单个大写字母

  • [[:alpha:]],[a-zA-Z]匹配指定集合中的单个大写或小写字母

  • [[:alnum:]],[0-9a-zA-Z] 匹配指定集合中的单个数字或小写字母或大写字母

  • [[:space:]] 匹配指定集合中的空白格

  • [[:punct:]]匹配指定集合中的标点符号

  • [^] 匹配指定集合外的任意单个字符

匹配次数用于对其前面紧邻的字符所能够出现的次数作出限定

  • * 匹配其前面的字符任意次,0,1或多次;

  • \? 匹配其前面的字符0次或1次;

  • \+ 匹配其前面的字符出现至少1次;

  • \{m\} 匹配其前面的字符m次;

  • \{m,n\}匹配其前面的字符至少m次,至多n次;

  • .* 匹配任意长度的任意字符


位置锚定:

  • ^ 行首锚定 写在模式的最左侧

  • $ 行尾锚定 写在模式的最右侧

  • ^$ 空白行

  • \< 词首锚定, \b 出现在要查找的单词模式的左侧;\<char

  • \> 词尾锚定,0);">\b 出现在要查找的单词模式的右侧;char\>

  • \<pattern\>匹配单词


分组:\(\)

后向引用:模式中,如果使用\(\)实现了分组,在某行文本的检查中,如果\(\)的模式匹配到了某内容,此内容后面的模式中可以被引用

\1,\2,\3

模式自左而右,引用第#个左括号以及与其匹配右括号之间的模式匹配到的内容


grep选项


举例练习:

1、显示/proc/meminfo文件中以大写或小写S开头的行;

wKiom1RoU9PTZug0AADYEiNjVHc143.jpg

2、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户

wKioL1RoWdXz4pSAAAI4V_4vMO0044.jpg

注:匹配单词取反时,必须使用-v选项。

\<\>只锚定数字和字母

3、显示/etc/passwd文件中其默认shell为/bin/bash的用户;进一步:仅显示上述结果中其ID号最大的用户

wKiom1RoX6qC9_r4AAGg07qqb0k120.jpg

而后显示最大的用户

wKiom1RoX_vAToOaAAByWeg2DlM934.jpg

4、找出/etc/passwd文件中的一位数或两位数;

wKiom1RoYdfhs3vTAAH8rMYA8KY687.jpg

注:‘|’或者符仅用于egrep的模式中,在grep模式中则使用‘\|’转译该符号


5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

wKiom1RoZACwCtlBAAGa0taDE4E870.jpg

6、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

wKioL1RoZgjz21e5AAGS20WG5hU105.jpg


7、找出netstat -tan命令执行结果中以'LISTEN'(后可有空白字符)结尾的行;

wKiom1RoZhyAboSKAAFksXp2swI266.jpg



Egrep 扩展的正则表达式

用法

# grep -E 'pattern' file...

# egrep 'pattern' file...

注:“#”在命令行使用的命令格式

扩展正则表达式的元字符:

字符匹配:

  • . 匹配任意单个字符

  • [] 匹配指定集合内的单个字符

  • [^]取反,匹配指定集合外的任意单个字符

匹配次数限定:

  • * 匹配其前面字符0次,1次,

  • ? 匹配其前面字符0次或1次;

  • + 匹配其前面的字符至少1次;

  • {m} 匹配其前面的字符m次;

  • {m,n}匹配其前面字符至少m次-->{m,};至多n次-->{0,n}


锚定:

  • ^ 锚定行首

  • $ 锚定行尾

  • \< 锚定词首

  • \> 锚定词尾 使用 \b


分组:

  • ()使用时无需\支持后向引用:或者:

    • a|b 匹配a或者b

    • ab|cd 匹配整个左侧或右侧


    举例

    练习1:显示当前系统上root、centos或user1用户的默认shell及用户名

    wKiom1RoazSwz7fiAAFHJGfeJDs931.jpg

    练习2:找出/etc/rc.d/init.d/functions文件中某单词后面跟一对小括号"()"的行;

    wKiom1RobNPCdpBMAADkl_XVKKI040.jpg

    练习3:使用echo输出一个路径,而使用egrep取出其基名;

    wKiom1RocdfRrawXAACex8KGioQ252.jpg

    注意:此题查找的路径中带符号,固使用命令时要思考清楚自己想搜索的路径结果


    fgrep fast grep 基于快速搜索


    用法fgrep [option] 'string' file...

    注:该命令不支持正则表达式,搜索时仅搜索字面字符,基于快速搜索

    wKioL1RodEnBv9PwAACaO4SdNhc562.jpg

猜你在找的正则表达式相关文章