Grep家族(下)

Grep和退出状态


Grep命令在shell教本中非常有用,因为它通过返回一个退出状态值来说明是否找到了你要搜索的模板或者文件。如果模板找到,grep返回状态值0,表示成功;如果无法找到模板,则返回退出状态值1;如果文件无法找到,就返回退出状态值2linuxunix使用的其他搜索程序并不返回退出状态值,只在出现语法错误的时候返回错误)。

[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 unixgrep就不支 持)

所有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-DOSMS-Windows中被支持

-u,--unix-byte-offsets

按照unix风格报告字符偏移量。只在-b选项同时被使用的时候才有效。这个选项只在MS-DOSMS-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将在文件Savagedatafile中搜索TB.

Grep ‘TB Savage’ datafile

打印所有包含模板TB Savage的行。如果没有引用(在本例子中,单引号和双引号的作用是一样的)。TBSavage之间的空格将导致grep在文件Savagedatafile中搜索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在打印每一行前打印字符偏移量。

请使用浏览器的分享功能分享到微信等