grep及正则表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grep及正则表达式相关的知识,希望对你有一定的参考价值。

文本搜索工具:grep,egrep,fgrep

GREP介绍

 grep: 根据模式条件搜索文本,并将符合模式的文本行显示出来。

 过滤条件:文本字符和正则表达式的元字符组合而成匹配条件

    以正则表达式的元字符,以及正常字符组合而成。即pattern(模式)

grep命令语法:

grep [options] PATTERN [FILE...]   

    --colo[u]r:加颜色

    -v:反向查找(显示没有被模式匹配到的行)

    -o:只显示被模式匹配到的字符串

    -i:    搜索时不区分字符的大小写

   -E: 扩展正则表达式

二)正则表达式(REGEXP)

即有元字符及正常字符所书写的模式,其中的 元字符不表示字符本身的意义,而是表达控制及通配的功能

基本正则表达式(grep):

案例1:

[email protected] ~]# grep ‘root‘ /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

 1、基本正则表达式元字符

 1)字符匹配

 .      匹配单个字符(只能匹配一个)

   []  匹配指定范围内的任意单个字符

 [^] 匹配指定范围外的任意单个字符

 [[:digit:]] [[:lower:]][[:upper:]] [[:space:]] [[:punct:]] [[:alnum:]] [[:alpha:]]

  [[email protected] ~]# grep "[nN][^[:alpha:]]" /etc/rc.d/rc.sysinit 

 2)次数匹配(在期望匹配的字符后面,提供一个控制符,用于表达匹配其前面的字符匹配的次数)

  *  任意长度 (0次、1次、多次)

  .* 任意字符任意次数

     \?  匹配0或1次(其左侧字符可有可无)

  \+ 匹配1次或多次(其左侧字符至少出现1次)

  \{m\}精确匹配m次(其左侧字符精确出现m次)

      \{m,n\} 至少m次,至多n次

  \{0,n\} 至多n次

      \{m,\}至少m次

3)位置锚定

  ^ 锚定行首

    $ 锚定行尾

  ^$: 模式匹配整行内容

   \< 锚定词首 \<pattern

      \> 锚定词尾 pattern/>

      \</> 匹配整个单词

[[email protected] ~]# ifconfig |grep "\<[0-9]\{2\}\>"

4) 分组 

    \(\)

  注意:分组中的模式,在某次的具体匹配过程中所匹配到的字符,可以被grep记忆(保存到内置的变量中,这些变量是\1,\2)因此,可以被引用

  "\(a.b\).*\1"

    \1:引用:模式中自左而右,由第一个左括号以及与之对应的右括号的模式所匹配到的内容

    \2 引用 模式自左向右,由第二个左括号与之对应的右括号中模式所匹配到的内容

[[email protected] ~]# grep "\(l..e\).*\1" aa.txt

[[email protected] ~]# netstat -tna |grep "LISTEN[[:space:]]*"

[[email protected] ~]# grep "^\([[:alnum:]]\+\)\>.*\1$" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
nologin:x:2004:2004::/home/nologin:/sbin/nologin

扩展正则表达式:(egrep)

 字符匹配:

  . 匹配任意单个字符

    【】括号内的指定字符

 次数匹配:

  * 任意次

  ? 0或1次

  + 至少1次

  {m}:精确匹配m次

  {m,n}:至少m次,至多n次

   {0,n}:至多n次

位置锚定

      ^  行首

  $   行尾

  \< 词首

  \> 词尾

分组

  ()

  引用:\1,\2

      或者: a|b(a或者b)

[[email protected] ~]# grep -E "^(s|S)" /proc/meminfo

[[email protected] ~]# egrep --color "^([[:alnum:]]+\>).*\1$" /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
nologin:x:2004:2004::/home/nologin:/sbin/nologin

 

以上是关于grep及正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

grep及扩展正则表达式

grep及正则表达式

grep及正则表达式

关于 grep及正则表达式

grep命令及正则表达式

grep文本查看工具及正则表达式