grep用法详解

简介:

 1,grep用法

      grep [ option ] pattern file ....
            [ option ]这种写法表示grep选项可以不写,看自己的需求。
          pattern是一种模式,简单点就是正则表达式的元字符组成。正则表达式的有种,基本正则表达和扩展正则表达式,这里元字符和bash的通配符所表示的意义是不一样。
2, basic regexp:基本正则表达式元字符,
   (1)  .:匹配任意单个字符
          查找包含user且user后面带一个字符的行
          grep  ‘user.’ /etc/passwd (模式可以用单引号和双引号,如果模式中要做变量替换时则必须用双引号,不然会出现变量无法替换)
    (2)   []:指定范围内的任意字符
           查找带有数字的行
          grep ‘[0-9]’ /etc/inittab
   (3)  [^ ]:不匹配[]里的字符(指定范围外的任意单个字符):
           查找没有小写字母的行
           grep ‘[^a-z]’ /etc/inittab
   (4)*:匹配其前面的字符任意多次数(包括零)前面的字符,可以是0到无数个
           com*查找包含co且m出现0次或0次以上的行
           grep ‘com*’ /etc/man.config
   (5)x\{m,n\}:x字符至少出现M次,最多出现N(反斜线表示转义,使{失去原来的意义)
        查找包含com且m最少出现一次最多出现4次的行 
        grep ‘com\{1,4\}’ /etc/man.config
   (6)x\{m,\}
         查找包含com且m最少出现一次的行
        grep ‘com\{1,\}’ /etc/man.config
   (7)x\{0,n\}
         查找包含com且m最少出现0次,最多出现5次的行
         grep ‘com\{0,5\}’ /etc/man.config
   (8)x\{n\}
         查找包含com且m只出现一次的行
         grep ‘com\{1\}’ /etc/man.config
   (9).*: 任意长度的任意字符(贪婪模式)
          查找包含com的行
          grep 'com.*' /etc/man.config
   (10)?:匹配其前面的字符0次或1次
        查找包含co且m出现0或1次
        grep 'com\?' /etc/man.config
   (11)特殊字符集
      [:lower:]小写字母也可写成[a-z]
      [:upper:]大写字母也可写成[A-Z]
      [:digit:]数字也可写成[0-9]
      [:alpha:]包含大小写字母也可写成[a-zA-Z]
      [:space:]所有的空白空间也可写成[ ]
      [:alnum:]数字与字母也可写[0-9a-zA-Z]
      [:punct:]所有的标点符号
      上面特殊字符集用的时候有一点要注意如grep ‘[[:digit:]]’/etc/inittab
      [:digit:]本身是表示字符集,所以不能省略
      
   锚定符
        (1)^:锚定行首
            查找行首以#开头的行
            grep '^#' /etc/inittab
        (2)$: 锚定行尾
            查找行尾以数字结尾的行
            grep ‘[[:digit:]]$ /etc/inittab 
       (3)^$:中间没内容,锚定空白行
            查找空白行
            grep '^$' /etc/inittab
        (4)\<: 锚定单词(也可以写成\b)
            查找MANPATH且MANPATH前面不包含任何字符的行
            grep '\<MANPATH' /etc/man.config
       (5)\>:锚定词尾(也可以写\b)
            查找MANPATH且MANPATH后面不包含任何字符的行
            grep 'MANPATH\>' /etc/man.config
       (6)\<string\>:锚定字符串
             查找MANPATH这个字符串的行
             grep '\<MANPATH\>' /etc/man.config
             grep '\bMANPATH\b' /etc/man.config
        (7) \(string\)向后引用  \n (n表示可以有多个引用)
              查找以数字开头和以同样数字结尾的行
              grep '^\([0-9]\).*\1$' /etc/inittab
        (8)&:完全引用
 
 
3,grep常用选项
  -i: 不区分大小写
  -v: 对匹配结果取反
  -o: 仅显示匹配到的字符串
  -q: 安静,不输出匹配到行 ,只返回退出状态,返回0表示找到匹配的行。
  -A n:n数字,除了列出该行外,后面的n行也列出来
  -B n:除了列出该行外,前面的n行也列出
  -E:支持扩展正则表达法等同于Egrep
  -F:支持扩展正则表达法等同于Fgrep
4,扩展正则表达式,在基本正则表达式的基础上,有一点小的修改
  \( \)  写成()
  \{ \}  写成{ }
    +:次数匹配,匹配其前面的字符至少出现一次,无上限
    |: 或者(二取一)
    其余的都一样, 基本正则表达式,使用( ) { } . ?  |都需要转义,在扩展正则表达中不需要加\
5, grep例子
      (1)不要#号开头的行
       grep -v  '^#' /etc/man.config
      (2) 输出不是数字开关的行
       grep  '^[^0-9]' /etc/man.config
      (3)输出行首是1或2
       grep '^\(1\|2\)' /etc/inittab
       grep -E '^(1|2)' /etc/inittab
      (4)查找前面是rc中间接任意字符而后跟/rc
       grep '.*\(rc\).*\/\1.*' /etc/inittab
 
      (5)取出当前电脑上的IP
    ifconfig |grep  -A 1 "^eth" |grep "\<[0-9.]\{1,\} |cut -d: -f2
   eth没有加0,考虑主机有可能有存在多块网卡
 

 










本文转自 deng304749970 51CTO博客,原文链接:http://blog.51cto.com/damondeng/900838,如需转载请自行联系原作者
目录
相关文章
|
6天前
|
程序员 Linux
grep用法详解
grep用法详解
|
2月前
|
Unix
grep的基本用法
grep的基本用法
26 2
|
2月前
|
Perl
grep的复杂用法
grep的复杂用法
26 3
|
2月前
|
Unix Linux
grep的实战用法
grep的实战用法
30 4
|
2月前
|
Unix Linux
grep的具体用法
grep的具体用法
50 1
|
弹性计算 Shell Linux
3天玩转shell--6.sed 和grep用法
本文将通过shell代码示例,简单通俗的讲解shell。通过执行代码和运行结果反向掌握shell编程方法。准备一台低配的阿里云ECS Linux环境,跟着教程走起,本文比较适合shell小白。
173 0
|
索引
$.grep() 的用法
$.grep() 的用法
290 0
$.grep() 的用法