grep命令

linux grep命令

1.作用
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

2.格式
  grep [options]

3.主要参数
  [options]主要参数:
  -c:(count)只输出匹配行的计数。
  -i:(ignore)不区分大小写(只适用于单字符)。
  -h:(hide)查询多文件时不显示文件名。
  -l:查询多文件时只输出包含匹配字符的文件名。
  -n:(number)显示匹配行及行号。
  -s:(show)不显示不存在或无匹配文本的错误信息。
  -v:显示不包含匹配文本的所有行。


  pattern正则表达式主要参数:
  \: 忽略正则表达式中特殊字符的原有含义。
  ^:匹配正则表达式的开始行。
  $: 匹配正则表达式的结束行。
  \<:从匹配正则表达式的行开始。
  \>:到匹配正则表达式的行结束。
  [ ]:单个字符,如[A]即A符合要求 。
  [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
  .  :所有的单个字符。
  * :有字符,长度可以为0。

4.grep命令使用简单实例
  $ grep ‘test’ d*
   显示所有以d开头的文件中包含 test的行。
  $ grep ‘test’ aa bb cc
  显示在aa,bb,cc文件中匹配test的行。
  $ grep ‘[a-z]\{5\}’ aa
  显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
  $ grep ‘w\(es\)t.*\1′ aa
  如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着 另外一个es(\1),找到就显示该行。

 
5.常用grep实例
  (1)多个文件查询
      grep "sort" *.doc            #见文件名的匹配

  (2)行匹配:输出匹配行的计数
      grep -c "48" data.doc       #输出文档中含有48字符的行数

  (3)显示匹配行和行数
      grep -n "48" data.doc       #显示所有匹配48的行和行号

  (4)显示非匹配的行
      grep -vn "48" data.doc      #输出所有不包含48的行

  (4)显示非匹配的行
      grep -vn "48" data.doc      #输出所有不包含48的行

  (5)大小写敏感
      grep -i "ab" data.doc       #输出所有含有ab或Ab的字符串的行

  正则表达式的应用:
  (1)正则表达式的应用 (注意:最好把正则表达式用单引号括起来)
      grep '[239].' data.doc      #输出所有含有以2,3或9开头的,并且是两个数字的行

  (2)不匹配测试
      grep '^[^48]' data.doc      #不匹配行首是48的行

  (3)使用扩展模式匹配
      grep -E '219|216' data.doc

 
  1.搜索特定的字符
  (1)查看显示字符的行数
  grep -n 'oo' pp

  (2)查看非oo的字符
  grep -v 'oo' pp

  (3)查看大小写忽略的字符
  grep -i 'oo' p

 
  2.利用[]处理搜索结果
  (4)查看 tast 和 test的字符串
    grep -n 't[ae]st' pp            #这里[ae]只当一个字符处理 a 或者是 e 这样就能匹配要求

   (5)若是希望匹配 t(x)st 这个x是任意的字符
    grep 't[.]st' pp        #.符号代表任意的字符

   (6)查看包含oo字符的信息
    grep -n 'oo' pp

   (7)若是希望在oo之前没有g的字符信息
    grep -n '[^g]oo' pp      #这里的^就是取反的意思 非goo得字符

   (8)取前面非字符的字符
    grep -n '[^a-zA-Z]oo' pp

   (9)得到数字的字符的话
    grep -n '[0-9]' pp

 
  3.行首和行尾的特殊处理 $^
  (10)若是希望取得第一行是 the 开头的字符行
    grep -n '^the' pp

  (11)若是希望取得以英文字符开头的字符
    grep -n '^[a-zA-Z]' pp

  (12)取得不是以英文字符开头的信息
    grep -n '^[^a-zA-Z]' pp     # 里面的^是取反 外面的^行开头

  (13)取得小数点结尾的行
    grep -n '\.$' pp           #小数点是特殊字符 需要用\进行转义    

  (14)取得一个空行的方式
    grep -n '^$' pp

   (15)希望取得所有文档中非注释掉得内容的话
    grep -v '^$' pp|grep -v ^#              第一个是取非空行的数据 第一个管道是取非#开头的数据
  或者
    grep -n '^#' pp


  4.任意字符和重复字符
  . :绝对的任意字符
  * :0个或是多个相同字符

  (16)要查看gf中间是两个字符的数据
    grep -n 'g..f' pp

  (17)至少有一个是o的字符串
    grep -n 'oo*' pp      #因为*代表0个或是多个

  (18)以g开头和结尾,中间至少一个o
    grep -n 'goo*g'

  (19)查找gg中间是任意字符的字符串
    grep -n 'g.*g' pp     #这里.就代表任意字符

 
  5.限定符 {}
  (20)查看g和p之间存在两个连个o的字符串
    grep -n 'go\{2,5\}p'

  (21)查找至少两个的字符创
    grep -n 'go\{2,\}p' pp

  (22)查找只有两个的字符串
    grep -n 'go\{2\}p' pp

 

原文地址:https://www.cnblogs.com/sunziying/p/6383114.html