grep,pgrep,egrep,fgrep有什么区别?


Answers:


85

grep,pgrep,egrep和fgrep(Linux)之间的区别:

grep

grep是“ Global Regular Expressions Print”的缩写。grep是一个程序,它逐行扫描指定的一个或多个文件,并返回包含模式的行。模式是一种通过将字符解释为元字符来指定一组字符串的表达式。例如,星号元字符(*)被解释为“零个或多个先前元素”。这使用户可以在grep命令中键入简短的字符和元字符序列,以使计算机向我们显示文件中匹配的行。

标准的grep命令如下所示:

grep <flags> '<regular expression>' <filename>

grep将搜索结果打印到屏幕(stdout)并返回以下退出值:

0    A match was found.
1    No match was found.
>1   A syntax error was found or a file was inaccessible 
     (even if matches were found).

一些常见的标志是:-c用于计算成功匹配的数量而不打印实际的匹配,-i使搜索不区分大小写,-n在每次匹配打印输出之前打印行号,-v以使用正则表达式的补码(即返回不匹配),并-l使用与表达式匹配的行来打印文件的文件名。

egrep

egrep是首字母缩写词,代表“扩展的全局正则表达式打印”。

egrep中的'E'表示将模式视为正则表达式。在egrep中启用了缩写为“ ERE”的“扩展正则表达式”。egrep的(其是相同的grep -E)治疗+?|(,和)作为元字符。

在基本的正则表达式(使用grep),元字符?+{|(,和)失去了特殊的意义。如果你想用grep对待这些字符作为元字符,转义 \?\+\{\|\(,和\)

例如,这里的grep使用基本的正则表达式,其中加号按字面意义处理,任何包含加号的行都将返回。

grep "+" myfile.txt

另一方面,egrep将“ +”视为元字符,并返回每一行,因为加号被解释为“一次或多次”。

egrep "+" myfile.txt

在这里,每行都会返回,因为+egrep已将视为元字符。普通grep只会搜索带有文字的行+

fgrep

fgrep是首字母缩写词,代表“固定字符串全局正则表达式打印”。

fgrep(与grep -F相同)是固定的或快速的grep,其行为与grep相同,但不能将任何正则表达式元字符识别为特殊字符。搜索将更快完成,因为它只处理简单的字符串,而不处理复杂的模式。

例如,如果我想在.bash_profile中搜索文字点(。),则使用grep会很困难,因为我必须对点进行转义,因为点是一个元字符,表示“通配符,任何单个字符”:

grep "." myfile.txt

上面的命令返回myfile.txt的每一行。改为这样做:

fgrep "." myfile.txt

然后,只有具有文字“。”的行。在他们被返回。fgrep帮助我们避免转义元字符。

pgrep

pgrep是首字母缩写,代表“进程ID全局正则表达式打印”。

pgrep查看当前正在运行的进程,并列出与选择标准匹配到stdout的进程ID。当您只想知道进程的进程ID整数时,pgrep会很方便。例如,如果我只想知道mysql进程的进程ID,则可以使用该命令pgrep mysql返回一个进程ID,例如7312。


摘自pgrep手册:用于匹配的进程名称限于/ proc / pid / stat输出中存在的15个字符。使用-f选项与完整的命令行/ proc / pid / cmdline匹配。
巴勃罗
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.