`
zhsc08zhsc
  • 浏览: 13654 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

linux egrep命令参数及用法详解---在文件内查找指定的字符串

阅读更多

  功能说明:在文件内查找指定的字符串。egrep执行效果如grep -E,使用的语法及参数可参照grep指令,与grep不同点在于解读字符串的方法,egrep是用extended regular expression语法来解读,而grep则用basic regular expression语法,extended regular expression比basic regular expression有更完整的表达规范。
  grep的一般格式为:
  grep [选项] 基本正则表达式 [文件]
  在grep命令中输入字符串参数时,最好将其用双引号括起来。例如:"my strings",这样做有两个原因,一个是防止被误会是shell命令,一个是可以用来查找多个单词组成的字符串,就如这个例子中的"my strings"。
  在调用变量的时候,也应该使用双引号,例如:grep "$MYNAME"。
  在调用模式匹配时,应该使用单引号。
  grep命令中的常用选项:
  -c 只输出匹配的行数。
  -i 不区分大小写。
  -h 查询多个文件时不显示文件名。
  -l 查询文件时只显示匹配字符所在的文件名。
  -n 显示匹配的行及其行号。
  -s 不显示不存在或不匹配文本的错误信息。
  -v 显示不匹配的所有行。
  -E 允许使用扩展模式匹配。例如:grep -E '00|04' find file,表示在findfile文件中查询包含00或04的行。
  grep允许使用国际字符模式匹配。类名及其等价的正则表达式:
  类正则表达式
  [[:upper:]]         [A-Z]
  [[:lower:]]         [a-z]
  [[:digit:]]         [0-9]
  [[:alnum:]]         [0-9a-zA-Z]
  [[:space:]]         空格或tab键
  [[:alpha:]]         [a-zA-Z]
  grep、fgrep和egrep命令
  这组命令以指定模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名。grep命令一次只能搜索一个指定的模式;egrep命令检索扩展的正则表达式(包括表达式组和可选项);fgrep命令检索固定字符串,它不识别正则表达式,是快速搜索命令。
  这组命令在搜索与定位文件中特定的主题方面非常有用。要搜索的模式可以被认为是一些关键词,您可以用它们来搜索文件中包含的这些关键词。编写程序时,可以用它来寻找某一个函数,或是相关的词组。grep命令的搜索功能比fgrep强大,因为grep命令的搜索模式可以是正则表达式,而fgrep却不能。有关正则表达式请参见shell一章。
  该组命令中的每一个命令都有一组选项,利用这些选项可以改变其输出方式。例如,可以在搜索到的文本行上加入行号,或者只输出文本行的行号,或者输出所有与搜索模式不匹配的文本行,或只简单地输出已搜索到指定模式的文件名,并且可以指定在查找模式时忽略大小写。
  这组命令在指定的输入文件中查找与模式匹配的行。如果没有指定文件,则从标准输入中读取。正常情况下,每个匹配的行被显示到标准输出。如果要查找的文件是多个,则在每一行输出之前加上文件名。
  语法:
  grep [选项] [查找模式] [文件名1,文件名2,……]
  egrep [选项] [查找模式] [文件名1,文件名2,……]
  fgrep [选项] [查找模式] [文件名1,文件名2,……]
  这组命令各选项的含义为:
  - E 每个模式作为一个扩展的正则表达式对待。
  - F 每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式。
  - b在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量。
  - c 只显示匹配行的数量。
  - i 比较时不区分大小写。
  - h 在查找多个文件时,指示grep不要将文件名加入到输出之前。
  - l 显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时,不重复显示此文件名。
  - n 在输出前加上匹配串所在行的行号(文件首行行号为1)。
  - v 只显示不包含匹配串的行。
  - x 只显示整行严格匹配的行。
  - e expression 指定检索使用的模式。用于防止以"-"开头的模式被解释为命令选项。
  - f expfile 从expfile文件中获取要搜索的模式,一个模式占一行。
  对该组命令的使用还需注意以下方面:
  在命令后键入搜索的模式,再键入要搜索的文件。其中,文件名列表中也可以使用特殊字符,如"*"等,用来生成文件名列表。如果想在搜索的模式中包含有空格的字符串,可以用单引号把要搜索的模式括起来,用来表明搜索的模式是由包含空格的字符串组成。否则,Shell将把空格认为是命令行参数的定界符,而 grep命令将把搜索模式中的单词解释为文件名列表中的一部分。在下面的例子中,grep命令在文件example中搜索模式"text file"。
  $ grep 'text file' example
  用户可以在命令行上用Shell特殊字符来生成将要搜索的文件名列表。在下面的例子中,特殊字符"*"用来生成一个文件名列表,该列表包含当前目录下所有的文件。该命令将搜索出当前目录下所有文件中与模式匹配的行。
  $ grep data *
  特殊字符在搜索一组指定的文件时非常有用。例如,如果想搜索所有的C程序源文件中特定的模式,您可以用"*.c"来指定文件名列表。假设用户的 C程序中包含一些不必要的转向语句(goto语句),想要找到这些语句,可以用如下的命令来搜索并显示所有包含goto语句的代码行:
  $ grep goto *.c
  用户可以在命令行上键入搜索模式,也可以使用-f选项从指定文件中读取要搜索的模式。在文件中,每个搜索模式占一行。如果经常要搜索一组常见字符串时,这个功能非常有用。在下面的例子中,用户要在文件exam中搜索字符串"editor"和"create",就把要搜索的模式放置在文件mypats 中,然后,grep命令从文件mypats中读取要搜索的模式。
  $ cat mypats
  editor
  create
  $ grep -f mypats exam
  grep的使用详解一
  # cat zhao.conf(显示我们所查文件的内容)
  48      Dec     3BC1997      LPSX  68.00 LVX2A    138
  483     Sept    5AP1996      USP   65.00 LVX2C    189
  47      Oct     3ZL1998      LPSX  43.00 KVM9D    512
  219     dec     2CC1999      CAD   23.00 PLV2C    68
  484     nov     7PL1996      CAD   49.00 PLV2C    234
  487     may     5PA1998      USP   37.00 KVM9D    644
  471     May     7Zh1999      UDP   37.00 KV30D    643
  # grep -c "48" zhao.conf(统计所有以"48"字符开头的行有多少)
  4
  # grep -i "May" zhao.conf(不区分大小写查找"May"所有的行)
  487     may     5PA1998      USP   37.00 KVM9D    644
  471     May     7Zh1999      UDP   37.00 KV30D    643
  # grep -i "may" zhao.conf
  487     may     5PA1998      USP   37.00 KVM9D    644
  471     May     7Zh1999      UDP   37.00 KV30D    643
  # grep -n "48" zhao.conf(显示行号;显示匹配字符"48"所在的行的行号)
  1:48          Dec     3BC1997      LPSX  68.00 LVX2A    138
  2:483         Sept    5AP1996    USP   65.00 LVX2C    189
  5:484         nov     7PL1996    CAD   49.00 PLV2C    234
  6:487         may     5PA1998      USP   37.00 KVM9D    644
  # grep -v "48" zhao.conf(显示输出没有字符"48"所有的行)
  47      Oct     3ZL1998      LPSX  43.00 KVM9D    512
  219     dec     2CC1999      CAD   23.00 PLV2C    68
  471     May     7Zh1999      UDP   37.00 KV30D    643
  # grep "471"  zhao.conf(显示输出字符"471"所在的行)
  471     May     7Zh1999         UDP     37.00   KV30D   643
  # grep "48\>" zhao.conf(精确显示输出字符"48"所在的行)
  48          Dec     3BC1997      LPSX  68.00 LVX2A    138
  # grep "48" zhao.conf(显示输出以字符"48"开头,并在字符"48"后是一个tab键所在的行
  注:tab键,安一下tab键即可;和精确显示输出的结果是相同的)
  48          Dec     3BC1997      LPSX  68.00 LVX2A    138
  # grep "48[34]" zhao.conf(显示输出以字符"48"开头,第三个字符是"3"或是"4"的所有的行)
  483         Sept    5AP1996      USP   65.00 LVX2C    189
  484         nov     7PL1996      CAD   49.00 PLV2C    234
  # grep '48[34]' zhao.conf(注意使用单引号(‘')和使用双引号("")在Solaris8中输出的结果是一样的;
  即:单引号、和双引号是通用的,只要你养成一种习惯就好)
  483         Sept    5AP1996      USP   65.00 LVX2C    189
  484         nov     7PL1996      CAD   49.00 PLV2C    234
  # grep "^[^48]" zhao.conf(显示输出行首不是字符"48"的行)
  219         dec     2CC1999      CAD   23.00 PLV2C    68
  # grep "[Mm]ay" zhao.conf(设置大小写查找:显示输出第一个字符以"M"或"m"开头,以字符"ay"结束的行)
  487     may     5PA1998      USP   37.00 KVM9D    644
  471     May     7Zh1999      UDP   37.00 KV30D    643
  # cat zhao.conf(再次显示我们所使用的文件的内容)
  48      Dec     3BC1997      LPSX  68.00 LVX2A    138
  483     Sept    5AP1996      USP   65.00 LVX2C    189
  47      Oct     3ZL1998      LPSX  43.00 KVM9D    512
  219     dec     2CC1999      CAD   23.00 PLV2C    68
  484     nov     7PL1996      CAD   49.00 PLV2C    234
  487     may     5PA1998      USP   37.00 KVM9D    644
  471     May     7Zh1999      UDP   37.00 KV30D    643
  # grep "K...D" zhao.conf(显示输出第一个字符是"K",第二、三、四是任意字符,第五个字符是"D"所在的行)
  47      Oct     3ZL1998      LPSX  43.00 KVM9D    512
  487     may     5PA1998      USP   37.00 KVM9D    644
  471     May     7Zh1999      UDP   37.00 KV30D    643
  # grep "[A-Z][A-Z][A-Z][9]D" zhao.conf(显示输出第一个字符的范围是"A-D",第二个字符的范围是"A-D",
  第三个字符的范围是"A-D",第四个字符是"9",第五个字符的是"D",所有的行:已知所查字符串的长度为5位)
  47          Oct     3ZL1998      LPSX  43.00 KVM9D    512
  487         may     5PA1998      USP   37.00 KVM9D    644
  # grep "5..1998" zhao.conf
  487         may     5PA1998      USP   37.00 KVM9D    644
  # grep "[35]..1998" zhao.conf(显示输出第一个字符是"3"或"5",第二、三个字符是任意,以1998结尾的所
  有行;已知所查字符串的长度是7位)
  47          Oct     3ZL1998      LPSX  43.00 KVM9D    512
  487         may     5PA1998      USP   37.00 KVM9D    644
  # 
  # grep "4\{2,\}" zhao.conf(模式出现几率查找:显示输出字符"4"至少重复出现两次的所有行)
  487         may     5PA1998      USP   37.00 KVM9D    644
  # grep "9\{3,\}" zhao.conf(模式出现几率查找:显示输出字符"9"至少重复出现三次的所有行)
  219     dec     2CC1999      CAD   23.00 PLV2C    68
  471     May     7Zh1999      UDP   37.00 KV30D    643
  # grep "9\{2,3\}" zhao.conf(模式出现几率查找:显示输出字符"9"重复出现的次数在一定范围内(重复出现2
  次或3次)所有行)
  48      Dec     3BC1997      LPSX  68.00 LVX2A    138
  483     Sept    5AP1996      USP   65.00 LVX2C    189
  47      Oct     3ZL1998      LPSX  43.00 KVM9D    512
  219     dec     2CC1999      CAD   23.00 PLV2C    68
  484     nov     7PL1996      CAD   49.00 PLV2C    234
  487     may     5PA1998      USP   37.00 KVM9D    644
  471     May     7Zh1999      UDP   37.00 KV30D    643
  # grep -n "^$" zhao.conf(显示输出空行的行号)
  grep的使用二
  # ls -l | grep "^d"(仅列出当前目录下的所有目录)
  drwxr-xr-x   2 root     other        512 11月 25 22:41 ldap
  # 
  # ls -l | grep"^[^d]"(仅列出当前目录下的所有文件)
  -rw-r--r--   1 root     other       4987 11月 25 23:22 grep.log
  -rw-r--r--   1 root     other          0 11月 26 22:34 grep.log2
  -rw-r--r--   1 root     other        267 11月 19 19:37 ifconfig
  #
  # ls -l|grep "^d.....x..x"(仅列出当前目录下符合"d.....x..x"权限的目录)
  drwxr-xr-x   2 root     other        512 11月 25 22:41 ldap
  # 
  # grep "mailsrv" /etc/passwd(抽出/etc/passwd中"mailsrv"的用户信息)
  mailsrv:x:101:3:iplanet mail user:/iplanet/server5/bin/msg/admin/bin:/bin/sh
  # 
  # grep "mailsrv" /etc/passwd >mailuser.log
  # (抽出/etc/passwd中"mailsrv"的用户信息输出到一个文件(mailsrv.log)中)
  # more mailuser.log
  mailsrv:x:101:3:iplanet mail user:/iplanet/server5/bin/msg/admin/bin:/bin/sh
  # 
  # ps -ef|grep telnet(在显示的进程中抽出"telnet"进程)
  root   321   165  0 22:29:33 ?        0:00 in.telnetd
  root   638   434  0 23:35:38 pts/1    0:00 grep telnet
  # ps -ef|grep telnet | grep -v grep (在显示的进程中抽出"telnet"进程;并丢弃ps中的grep进程)
  root   321   165  0 22:29:33 ?        0:00 in.telnetd
  # 
  # ps -ef|grep -v telnet(将抽出除"telnet"之外的所有进程)
  # cat zhao.conf(再来看一下我们使用的文件内容)
  48      Dec     3BC1997      LPSX  68.00 LVX2A    138
  483     Sept    5AP1996      USP   65.00 LVX2C    189
  47      Oct     3ZL1998      LPSX  43.00 KVM9D    512
  219     dec     2CC1999      CAD   23.00 PLV2C    68
  484     nov     7PL1996      CAD   49.00 PLV2C    234
  487     may     5PA1998      USP   37.00 KVM9D    644
  471     May     7Zh1999      UDP   37.00 KV30D 643
  # egrep "(3ZL|2CC)" zhao.conf(使用egrep来抽取文件(zhao.conf)中前三个字符匹配"3ZL"或"2CC"的行)
  47          Oct     3ZL1998      LPSX  43.00 KVM9D    512
  219         dec     2CC1999      CAD   23.00 PLV2C    68
  # grep "48" zhao.conf |wc(使用grep抽取文件(zhao.conf)中前两个字符匹配"48"的行,并统计出有几行匹配,有多少个
  字,这些字占用多少字节的空间)
  4      28     224
  在UNIX中字处理是一件很烦琐的事情,但这些字处理工具给我们带来了很大的方便;这里grep、egrep(扩展grep,在一些UNIX中
  也存在)仅仅是一种工具。但其能灵活的抽出你需要的东东。它将随着你对UNIX的理解程度,逐步变成你手头不可缺少的一个工具
  其在shell编程中同样具有举足轻重的位置。grep、egrep和其他字处理工具的组合使用更为灵活、深澳!
  --------------
  grep能找出带有关键字的行,但是工作中有时需要找出该行前后的行,下面是解释
  1. grep -A1 keyword filename
  找出filename中带有keyword的行,输出中除显示该行外,还显示之后的一行(After 1)
  2. grep -B1 keyword filename
  找出filename中带有keyword的行,输出中除显示该行外,还显示之前的一行(Before 1)
  3. grep -1 keyword filename
  找出filename中带有keyword的行,输出中除显示该行外,还显示之前的一行(After 1)和显示之后的一行(After 1)
分享到:
评论

相关推荐

    Linux egrep命令用法详解

    Linux egrep命令用于在文件内查找指定的字符串。 egrep执行效果与”grep-E”相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。 egrep是用extended regular expression语法来解读的,而...

    入门学习Linux常用必会60个命令实例详解doc/txt

    umount 命令是mount命令的逆操作,它的参数和使用方法和mount命令是一样的。Linux挂装CD-ROM后,会锁定CD—ROM,这样就不能用CD- ROM面板上的Eject按钮弹出它。但是,当不再需要光盘时,如果已将/cdrom作为符号链接...

    Linux中grep和egrep命令详解

    rep / egrep 语法: grep [-cinvABC] ‘word’ filename -c :打印符合要求的行数 -i :忽略大小写 -n :在输出符合要求的行的同时连同行号一起输出 -v :打印不符合要求的行 -A :后跟一个数字(有无空格都可以),...

    Linux中利用grep命令如何检索文件内容详解

    Linux系统中搜索、查找文件中的内容,一般最常用的是grep命令,另外还有egrep命令,同时vi命令也支持文件内容检索。下面来一起看看Linux利用grep命令检索文件内容的详细介绍。 方法如下: 1、搜索某个文件里面是否...

    Linux命令搜索工具linux-command.zip

    Linux命令大全搜索工具,内容包含Linux命令手册、详解、学习、搜集。   Linux命令分类 这里存放Linux 命令大全并不全,你可以通过linux-command来搜索,它是把 command 目录里面搜集的...

    linux培训初中高级和资深课程视频.zip

    目录网盘文件永久链接 01_01_面授班开场 01_02_面授班开场 01_03_操作系统基础 ...06_03_bash脚本编程之五 字符串测试及for循环 07_01_vim编辑器详解 07_02_bash脚本编程之六 使用脚本选项及组合条件测试.......

    egrep的元字符总结

    egrep的元字符总结, 一些例子

    Linux与unix shell编程指南(1-16)

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    Linux 必备指令摘要,快速找到你要的命令

    突然忘了命令名字的时候顺手查查中文意思 bash GNU Bouren-Again Shell bash shell_script cat 观看一般文本文件 cat file.txt chgrp 更改群组 chgrp groupname file chmod 更改文件权限 chmod 755 file chown 更改...

    Linux Grep命令使用的详细介绍

    egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,...

    LINUX and SHELL 自学总结

    八、LINUX系统常用配置方法及命令 11 1. 网卡相关的TCP/IP网络配置文件地址 11 2. #NETCONFIG命令可以永久保存设置 11 3. #NEAT或REDHAT-CONFIG-NETCONFIG可永久保存设置。 12 4. #DATE命令的使用 12

    LINUX与UNIX SHELL编程指南(很全)

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    Linux与unix shell编程指南

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell ...

    Linux shell编程指南

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 ...

    linux shell 编程教程

    linux shell编程 教程大全 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对模式 5 1.4.4 ...

    绝版经典《Linux与UNIX Shell编程指南》

    7.4 使用*匹配字符串中的单字符或其重复 序列 51 7.5 使用\屏蔽一个特殊字符的含义 52 7.6 使用[]匹配一个范围或集合 52 7.7 使用\{\}匹配模式结果出现的次数 53 7.8 小结 55 第8章 grep家族 56 8.1 grep 57 8.1.1 ...

    LINUX与UNIX SHELL编程指南 高清PDF

    本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。 目 录 译者序 前言 第一部分 shell...

    LINUX与UNIX_Shell编程指南

    详细的介绍了Linux下的编程指南 目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限 1 1.1 文件 1 1.2 文件类型 2 1.3 权限 2 1.4 改变权限位 4 1.4.1 符号模式 4 1.4.2 chmod命令举例 5 1.4.3 绝对...

Global site tag (gtag.js) - Google Analytics