Grep和退出状态
Grep命令在shell教本中非常有用,因为它通过返回一个退出状态值来说明是否找到了你要搜索的模板或者文件。如果模板找到,grep返回状态值0,表示成功;如果无法找到模板,则返回退出状态值1;如果文件无法找到,就返回退出状态值2(linuxunix使用的其他搜索程序并不返回退出状态值,只在出现语法错误的时候返回错误)。
[posftp@SZTrade posftp]$ grep 'john' /etc/passwd
[posftp@SZTrade posftp]$ echo $?
1
[posftp@SZTrade posftp]$echo $status
Grep与选项
Gun grep 选项
-b 在搜索到的行为的前面打印该行所在的块号码。该功能在通过内容定位块的号码时非常有用.
-c 只显示有多少行匹配,而不具体显示匹配的行
-h 不显示文件名
-I 在字符串比较的时候忽略大小写
-l 只显示包含匹配模板的行的文件名清单,不同项目之间用换行符分割
-n 在每一行前面打印该行在文件中的行数
-s 静默工作,除非出现错误信息,否则不打印任何信息,这个功能在检测退出状态的时候有用
-v 反检索,只显示不匹配的行
-w 如果被<和>引用,就把表达式做为一个单词搜索只在grep中 有效(不是所有版本的grep都支持该特性,sco unix的grep就不支 持)
所有gun干部都可以使用的grep选项(-G,-E和-F)
选项 | 功能 |
-# | 表示同时显示匹配上下的#行,例如:grep -2 pattern filename 表示同时显示匹配行上下各两行 |
-A#,--after-context=# | 在匹配指定的内容的行打印完毕后,再打印一行#号 |
-B#,--before-context=# | 在匹配模板的行的前面打印一行#号 |
-C,--context | 相当于选项-2,在匹配行的前后各打印2行空行 |
-V,--version | 显示包括bug报告在内的版本信息 |
-b,--byte-offset | 在每一行前面打印字符偏移量 |
-c,--count | 打印每个文件匹配行的个数 |
-e PATTERN,--regexp=PATTERN | 使用PATTERN的字面意思作为模板,在模板以“-”开头的时候非常有用 |
-f FILE,--file=FILE | 从FILE中提取模板。空文件中包含0个模板,所有什么也不匹配 |
-h,--no-filename | 当多个文件匹配时候,不显示匹配文件名前缀 |
-i,--ignore-case | 在模板和输入文件中都忽略大小写差别 |
-L,--files-without-match | 打印不匹配模板的文件名清单 |
-I,--files-with-matches | 打印匹配模板的文件名清单 |
-n,--line-number | 在匹配的行前面打印行号 |
-q,--quit | 取消标准输出,跟-n功能是一样的 |
-s,--silent | 不显示关于不存在或者无法读取文件的错误信息 |
-v,--revert-match | 打印不匹配模板的行 |
-w,--word-regexp | 只打印以单词形式匹配模板的行,模板可以是包含数字,字符和下划线的字符集 |
-x,--line-regexp | 只打印正行匹配的行 |
-y | 用法同-i |
-U,--binary | 把文件作为二进制文件,这个选项只在MS-DOS和MS-Windows中被支持 |
-u,--unix-byte-offsets | 按照unix风格报告字符偏移量。只在-b选项同时被使用的时候才有效。这个选项只在MS-DOS和MS-Windowns中被支持 |
例子:
grep Tom /etc/passwd
在文件/etc/passwd中搜索模板Tom,如果成功,搜索的行将显示在屏幕上。
Ps aux | grep root
Ps命令输出(pa aux显示系统中运行的所有进程)被发送给grep,所有包含root的行都将被打印。
正则grep实例(grep ,grep –G)
grep NW datafile
grep –G NW datafile
打印文件datafile中包含正则表达式NW的行
grep NW d*
打印所有以d 开头的文件中且包含正则表达式NW的行。Shell扩展d*表示所有以d开头的文件。
Grep ‘^n’ datafile
打印所有以n开头的行,^表示锚定行的开头。
Grep TB Savage datafile
因为第一个参数是模板,其他的参数是文件名,所以grep将在文件Savage和datafile中搜索TB.
Grep ‘TB Savage’ datafile
打印所有包含模板TB Savage的行。如果没有引用(在本例子中,单引号和双引号的作用是一样的)。TB与Savage之间的空格将导致grep在文件Savage和datafile中搜索TB。
Gun grep选项例子
grep -2 patricia datafile
打印匹配patricia的行以及该行的上下各两行。
Grep –C patricia datafile
选项-C跟选项-2的功能是一样的。
Grep –A 2 patricia datafile
Grep打印匹配patricia的行已经该行的下两行。
Grep –b ‘[abc]’ datafile
选项-b使得grep在打印每一行前打印字符偏移量。