小试牛刀:文本处理工具之grep、egrep详解

时间:2022-01-17 08:54:40

grep、egrep命令


本文中主要介绍了linux系统下grep、egrep命令和正则表达式的基本参数和使用格式、方法。



1. Grep简介

grep (global search regular expression_r(RE) and print out theline)               (全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

     格式:grep [options] 'PATERN' file,...

         --color=auto



2.Grep常用命令选项

-a :在二进制文件中,以文本文件的方式搜索数据

-? : 同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的             上下2行。

-b:--byte-offset

   打印匹配行前面打印该行所在的块号码。

-c,--count

   只打印匹配的行数,不显示匹配的内容。

-f File,--file=File

   从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。

-h,--no-filename

   当搜索多个文件时,不显示匹配文件名前缀。

-i,--ignore-case

   略大小写差别。

-q,--quiet

   取消显示,只返回退出状态。0则表示找到了匹配的行。

-l,--files-with-matches

   打印匹配模板的文件清单。

-L,--files-without-match

   打印不匹配模板的文件清单。

-n,--line-number

   在匹配的行前面打印行号。

-s,--silent

   不显示关于不存在或者无法读取文件的错误信息。

-v,--revert-match  反检索,只显示不匹配的行。

                               取出默认shell为非bash的用户;                                grep -v bash /etc/passwd |cut -d: -f

-w,--word-regexp

   如果被\<和\>引用,就把表达式做为一个单词搜索。

-V,--version

   显示软件版本信息。



   3.基本正则表达式的元字符:

         [] : 表示匹配范围内任意单个内容

                               显示/proc/meminfo文件中以大小写s开头的行;                                grep "^[Ss]" /proc/meminfo

         [^] : 表示匹配范围外任意单个内容

                               复制/etc目录下以非字母开头的文件至/tmp/c目录中;

             cp -r /etc [^[:alpha:]] /tmp/c


●字符匹配:

   [:alnum:] 所有字母和数字字符

   [:alpha:] 字母字符

   [:digit:] [0-9] 数字字符[0-9]

   [:graph:] 非空字符(非空格、控制字符)

   [:lower:] [a-z] 小写字符

   [:cntrl:] 控制字符

   [:print:] 非空字符(包括空格)

   [:punct:] 特殊符号

   [:space:] 所有空白字符(新行,空格,制表符)

                               显示/boot/grub/grub.conf中以至少一个空白字符开头的行                                grep "^[[:space:]]\{1,\}[^[:space:]]\{1,\}" /boot/grub/grub.conf

   [:upper:] [A-Z] 大写字符

   [:xdigit:] 十六进制数字(0-9,a-f,A-F)


     ●次数匹配:用来匹配其前面的字符的次数

          *:任意一次      x*y,可以匹配到xxy, xy, y;

          \?:0次或一次    x\?y,xy,y,xxy

          \{m\}:匹配m次

          \{m,n\}:出现m或n次

                               找出/etc/passwd文件中一位数或两位数

                               grep "\<[0-9]\{1,2\}\>" /etc/passwd

          \{m,\}:至少出现m次;

                               显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而                                               后 又 有 一  个至少非空白字符的行;                                grep "^#[[:space:]]\{1,\}[^[:alpha:]]\{1,\}" /etc/rc.d/rc.sysinit

          \{0,n\}:至多出现n次;


     ●位置锚定:用于指定字符出现的位置

          ^:锚定行首    ^Char

          $:锚定行尾    char$

          ^$:空白行

          \<char:锚定词首    \bchar

                               找出/etc/passwd文件中一位数或两位数

                               grep "\<[0-9]\{1,2\}\>" /etc/passwd

          char\>:锚定词尾    char\b

          分组:\(\)    \(ab\)*xy


     ●引用:

           \1:前向引用,应用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的                   内容\(a.b\)xy\1:abxy,

           \2:...



   4、egrep和grep的区别地方

       egrep:使用扩展正则表达来构建模式,相当于grep -E是grep的扩展,支持更多的re           元字符.linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来                 使用egrep和fgrep的功能。


     ●增加的元字符

       + : 表示匹配前面的字符至少一次

           小试牛刀:文本处理工具之grep、egrep详解

       | : 表示匹配符号两边的任意一边,比如a|b,表示匹配a或者b

           小试牛刀:文本处理工具之grep、egrep详解

           注意,| 左右带括号和不带括号的区别


     ●变化的元字符

           ? : 等同于grep中的\?,在egrep中不需要反义

           () : 等同于grep中的\(\),在egrep中不需要反义

           {} : 等同于grep中的\{\},在egrep中不需要反义

           小试牛刀:文本处理工具之grep、egrep详解

           小试牛刀:文本处理工具之grep、egrep详解

           小试牛刀:文本处理工具之grep、egrep详解

           以上上就是grep和egrep的简单用法。